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

export const getAllReturnExpectations = async (req: Request, res: Response) => {
  try {
    const { page = 1, limit = 10 } = req.query;
    const skip = (Number(page) - 1) * Number(limit);

    const [returnExpectations, total] = await ReturnExpectation.findAndCount({
      order: { id: "ASC" },
      skip,
      take: Number(limit),
    });

    return sendSuccessResponse(res, 200, "Return expectations retrieved successfully", {
      returnExpectations,
      total,
      page: Number(page),
      limit: Number(limit),
      totalPages: Math.ceil(total / Number(limit)),
    });
  } catch (error) {
    return sendErrorResponse(res, 500, "Internal server error", error);
  }
};

export const createReturnExpectation = async (req: Request, res: Response) => {
  try {
    const { title, percentage, description, subDescription } = req.body;

    if (!title || !percentage || !description || !subDescription) {
      return sendErrorResponse(res, 400, "All fields are required");
    }

    const returnExpectation = new ReturnExpectation();
    returnExpectation.title = title;
    returnExpectation.percentage = percentage;
    returnExpectation.description = description;
    returnExpectation.subDescription = subDescription;

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

export const updateReturnExpectation = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;
    const { title, percentage, description, subDescription } = req.body;

    const returnExpectation = await ReturnExpectation.findOne({ where: { id: Number(id) } });
    if (!returnExpectation) {
      return sendErrorResponse(res, 404, "Return expectation not found");
    }

    if (title) returnExpectation.title = title;
    if (percentage) returnExpectation.percentage = percentage;
    if (description) returnExpectation.description = description;
    if (subDescription) returnExpectation.subDescription = subDescription;

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

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

    const returnExpectation = await ReturnExpectation.findOne({ where: { id: Number(id) } });
    if (!returnExpectation) {
      return sendErrorResponse(res, 404, "Return expectation not found");
    }

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