export const getSudokuPuzzleById = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;
    const puzzle = await Game.findById(id).lean();
    if (!puzzle || puzzle.type !== 'sudoku') {
      return sendResponse(res, 404, 'Sudoku puzzle not found');
    }
    sendResponse(res, 200, 'Sudoku puzzle detail fetched', { puzzle });
  } catch (error) {
    handleError(res, error);
  }
};

export const deleteSudokuPuzzleById = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;
    const puzzle = await Game.findByIdAndDelete(id);
    if (!puzzle || puzzle.type !== 'sudoku') {
      return sendResponse(res, 404, 'Sudoku puzzle not found or already deleted');
    }
    sendResponse(res, 200, 'Sudoku puzzle deleted', { id });
  } catch (error) {
    handleError(res, error);
  }
};

export const getAllSudokuPuzzles = async (req: Request, res: Response) => {
  try {
    // Include solution field for admin
    const puzzles = await Game.find({ type: 'sudoku' }).sort({ createdAt: -1 }).lean();
    sendResponse(res, 200, 'All sudoku puzzles fetched', { puzzles });
  } catch (error) {
    handleError(res, error);
  }
};

export const addSudokuPuzzle = async (req: Request, res: Response) => {
  try {
    const { difficulty, puzzle, solution } = req.body;
    if (!difficulty || !puzzle || !solution) {
      return sendResponse(res, 400, 'Missing required fields');
    }
    const newPuzzle = await Game.create({
      type: 'sudoku',
      difficulty,
      puzzle,
      solution,
      is_active: false,
    });
    sendResponse(res, 201, 'Sudoku puzzle added', { puzzle: newPuzzle });
  } catch (error) {
    handleError(res, error);
  }
};

export const updateSudokuPuzzle = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;
    const { difficulty, puzzle, solution, is_active } = req.body;
    const update: any = {};
    if (difficulty) update.difficulty = difficulty;
    if (puzzle) update.puzzle = puzzle;
    if (solution) update.solution = solution;
    if (typeof is_active === 'boolean') update.is_active = is_active;
    const updated = await Game.findByIdAndUpdate(id, update, { new: true });
    if (!updated || updated.type !== 'sudoku') {
      return sendResponse(res, 404, 'Sudoku puzzle not found');
    }
    sendResponse(res, 200, 'Sudoku puzzle updated', { puzzle: updated });
  } catch (error) {
    handleError(res, error);
  }
};

import { Request, Response } from 'express';
import Game from '../models/game';
import { sendResponse, handleError } from '../utils/apiResponse';
