import { Request, Response } from "express";
import { Disclaimer } from "../../database/menu/disclaimer";
import { sendSuccessResponse, sendErrorResponse } from "../../utills/response";

export const getAllDisclaimers = async (req: Request, res: Response) => {
  try {
    const { page = '1', limit = '10' } = req.query;
    const pageNum = Math.max(1, parseInt(page as string, 10));
    const limitNum = Math.max(1, Math.min(100, parseInt(limit as string, 10)));
    const skip = (pageNum - 1) * limitNum;

    const [disclaimers, totalCount] = await Disclaimer.findAndCount({
      order: { created_at: "ASC" },
      skip,
      take: limitNum
    });

    const totalPages = Math.ceil(totalCount / limitNum);

    return sendSuccessResponse(res, 200, "Disclaimers retrieved successfully", {
      disclaimers,
      pagination: {
        currentPage: pageNum,
        totalPages,
        totalCount,
        limit: limitNum
      }
    });
  } catch (error) {
    return sendErrorResponse(res, 500, "Internal server error", error);
  }
};

export const createDisclaimer = async (req: Request, res: Response) => {
  try {
    const { title, content, image, isActive } = req.body;

    if (!title || !content) {
      return sendErrorResponse(res, 400, "Title and content are required");
    }

    const disclaimer = new Disclaimer();
    disclaimer.title = title;
    disclaimer.content = content;

    if (image !== undefined) {
      disclaimer.image = image;
    }

    if (isActive !== undefined) {
      if (isActive === false || isActive === "false") {
        disclaimer.isActive = false;
      } else {
        disclaimer.isActive = !!isActive;
      }
    }

    await disclaimer.save();
    return sendSuccessResponse(res, 201, "Disclaimer created successfully", disclaimer);
  } catch (error) {
    return sendErrorResponse(res, 500, "Internal server error", error);
  }
};

export const updateDisclaimer = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;
    const { title, content, image, isActive } = req.body;

    const disclaimer = await Disclaimer.findOne({ where: { id } });
    if (!disclaimer) {
      return sendErrorResponse(res, 404, "Disclaimer not found");
    }

    if (title) disclaimer.title = title;
    if (content) disclaimer.content = content;
    if (image !== undefined) disclaimer.image = image;
    if (isActive !== undefined) {
      disclaimer.isActive = isActive === false || isActive === "false" ? false : !!isActive;
    }

    disclaimer.updated_at = new Date();

    await disclaimer.save();
    return sendSuccessResponse(res, 200, "Disclaimer updated successfully", disclaimer);
  } catch (error) {
    return sendErrorResponse(res, 500, "Internal server error", error);
  }
};

export const deleteDisclaimer = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;

    const disclaimer = await Disclaimer.findOne({ where: { id } });
    if (!disclaimer) {
      return sendErrorResponse(res, 404, "Disclaimer not found");
    }

    await disclaimer.remove();
    return sendSuccessResponse(res, 200, "Disclaimer deleted successfully", null);
  } catch (error) {
    return sendErrorResponse(res, 500, "Internal server error", error);
  }
};