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

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

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

    let returnExpectations: ReturnExpectation[] = [];
    if (includeReturnExpectations === 'true') {
      returnExpectations = await ReturnExpectation.find({
        order: { id: "ASC" },
      });
    }

    return sendSuccessResponse(res, 200, "Data retrieved successfully", {
      courses,
      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 createEducationCourse = async (req: Request, res: Response) => {
  try {
    const { title, subtitle, type, duration, color, icon, order,isActive,video} = req.body;

    if (!title || !subtitle || !type || !duration || !color) {
      return sendErrorResponse(res, 400, "Title, subtitle, type, duration and color are required");
    }

    const course = new EducationCourses();
    course.title = title;
    course.subtitle = subtitle;
    course.type = type;
    course.duration = duration;
    course.color = color;
    course.isActive = isActive !== "false" && !!isActive;
    course.icon = icon ?? null;
    course.order = order ?? 0;
      course.video = video;

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

export const updateEducationCourse = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;
    const { title, subtitle, type, duration, color, icon, order,isActive,video} = req.body;

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

    if (title) {
      course.title = title;
    }
    if (subtitle) {
      course.subtitle = subtitle;
    }
    if (type) {
      course.type = type;
    }
    if (duration) {
      course.duration = duration;
    }
    if (color) {
      course.color = color;
    }
    if (video !== undefined) {
      course.video = video;
    }
    if (isActive !== undefined) {
      course.isActive = isActive !== "false" && !!isActive;
    }
    if (icon !== undefined) {
      course.icon = icon;
    }
    if (order !== undefined) {
      course.order = order;
    }
    course.updated_at = new Date();

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

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

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

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