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

// GET all demo videos
export const getAllDemoVideos = async (req: Request, res: Response) => {
  try {
    const demoVideos = await DemoVideos.find();
    return sendSuccessResponse(res, 200, "Demo videos retrieved successfully", demoVideos);
  } catch (error) {
    return sendErrorResponse(res, 500, "Internal server error", error);
  }
};

// CREATE demo video
export const createDemoVideo = async (req: Request, res: Response) => {
  try {
    const { video } = req.body;

    // Validation
    if (!video) {
      return sendErrorResponse(res, 400, "Video URL is required");
    }

    const newDemoVideo = new DemoVideos();
    newDemoVideo.video = video;

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

// UPDATE demo video
export const updateDemoVideo = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;
    const { video } = req.body;

    const existingDemoVideo = await DemoVideos.findOne({ where: { id } });
    if (!existingDemoVideo) {
      return sendErrorResponse(res, 404, "Demo video not found");
    }

    // Conditional updates
    if (video !== undefined) existingDemoVideo.video = video;
    existingDemoVideo.updated_at = new Date();

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

// DELETE demo video
export const deleteDemoVideo = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;

    const demoVideo = await DemoVideos.findOne({ where: { id } });
    if (!demoVideo) {
      return sendErrorResponse(res, 404, "Demo video not found");
    }

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