import { Request, Response } from "express";
import { sendResponse } from "../utils/apiResponse";
import Game from "../models/availableGames";
// In-memory static games list
// let games = [
//   {
//     id: 'sudoku',
//     title: 'Sudoku',
//     subtitle: 'Up to 500 pts',
//     icon: 'grid',
//     color: 'green',
//     route: "/GamesScreen",
//     is_active: true,
//   },
//   // Add more games as needed
// ];

export const getAvailableGames = async (
  _req: Request,
  res: Response,
): Promise<void> => {
  const games = await Game.find({ is_active: true }).sort({ order: 1 }).lean();

  sendResponse(res, 200, "Games fetched", {
    games: games.map((game) => ({
      id: game._id,
      title: game.title,
      subtitle: game.subtitle,
      icon: game.icon,
      color: game.color,
      route: game.route,
      available: game.is_active,
    })),
  });
};

export const adminGetAllGames = async (
  _req: Request,
  res: Response,
): Promise<void> => {
  const games = await Game.find().sort({ order: 1 });

  sendResponse(res, 200, "All games fetched", { games });
};

export const adminAddGame = async (
  req: Request,
  res: Response,
): Promise<void> => {
  const { title, subtitle, icon, color, route, is_active, order } =
    req.body;

  const existing = await Game.findOne({ title });

  if (existing) {
    sendResponse(res, 400, "Game already exists");
    return;
  }

  const game = await Game.create({
    title,
    subtitle,
    icon,
    color,
    route,
    is_active,
    order,
  });

  sendResponse(res, 201, "Game added", { game });
};

export const adminUpdateGame = async (
  req: Request,
  res: Response,
): Promise<void> => {
  const { id } = req.params;

  const game = await Game.findByIdAndUpdate(id, req.body, { new: true });

  if (!game) {
    sendResponse(res, 404, "Game not found");
    return;
  }

  sendResponse(res, 200, "Game updated", { game });
};

export const adminDeleteGame = async (
  req: Request,
  res: Response,
): Promise<void> => {
  const { id } = req.params;

  const game = await Game.findByIdAndDelete(id);
  console.log("Deleting game id:", req.params.id);

  if (!game) {
    sendResponse(res, 404, "Game not found");
    return;
  }

  sendResponse(res, 200, "Game deleted", { game });
};

// GET /api/games/available
// export const getAvailableGames = async (_req: Request, res: Response): Promise<void> => {
//   sendResponse(res, 200, 'Games fetched', { games: games.filter(g => g.is_active) });
// };

// // ADMIN: GET all games (active/inactive)
// export const adminGetAllGames = async (_req: Request, res: Response): Promise<void> => {
//   sendResponse(res, 200, 'All games fetched', { games });
// };

// // ADMIN: Add a new game
// export const adminAddGame = async (req: Request, res: Response): Promise<void> => {
//   const { id, title, subtitle, icon, color, is_active } = req.body;
//   if (!id || !title) {
//     sendResponse(res, 400, 'id and title are required');
//     return;
//   }
//   if (games.find(g => g.id === id)) {
//     sendResponse(res, 400, 'Game with this id already exists');
//     return;
//   }
//   games.push({ id, title, subtitle, icon, color, route: "/GamesScreen", is_active: !!is_active });
//   sendResponse(res, 201, 'Game added', { games });
// };

// // ADMIN: Update a game
// export const adminUpdateGame = async (req: Request, res: Response): Promise<void> => {
//   const { id, ...rest } = req.body;
//   const idx = games.findIndex(g => g.id === id);
//   if (idx === -1) {
//     sendResponse(res, 404, 'Game not found');
//     return;
//   }
//   games[idx] = { ...games[idx], ...rest };
//   sendResponse(res, 200, 'Game updated', { game: games[idx] });
// };

// // ADMIN: Delete a game
// export const adminDeleteGame = async (req: Request, res: Response): Promise<void> => {
//   const { id } = req.body;
//   const idx = games.findIndex(g => g.id === id);
//   if (idx === -1) {
//     sendResponse(res, 404, 'Game not found');
//     return;
//   }
//   const removed = games.splice(idx, 1);
//   sendResponse(res, 200, 'Game deleted', { game: removed[0] });
// };
