import { NextFunction, Request, Response } from "express";
import { ApiResponse } from "../../middleware/ApiResponse";
import { CatchAsyncError } from "../../middleware/Catch";
import { ConversionService } from './conversion.service'
import { ApiError } from "../../middleware/ApiError";

export const getAllConversion = CatchAsyncError(async (req: Request, res: Response, next: NextFunction) => {
    const response = await ConversionService.getAllConversion();
    return res.status(200).json(
        new ApiResponse("All Successfully", 200, response)
    )
})


export const createConversion = CatchAsyncError(async (req: Request, res: Response, next: NextFunction) => {



    const { websites } = req.body as { websites: string }

    const response = await ConversionService.createConversion(websites);

    return res.status(201).json(
        new ApiResponse(`Conversion Created Successfully`, 201, [])
    )

});



export const updateConversion = CatchAsyncError(async (req: Request, res: Response, next: NextFunction) => {

    const conversionId = req.params.conversionId;


    const findId = await ConversionService.getConversionById(conversionId);

    if (!findId) {
        throw new ApiError("Resource not found", 404);
    }
    
    const { websites, exo, ts } = req.body as { websites: string, ts: boolean, exo: boolean }

    const response = await ConversionService.updateConversion({ websites, exo, ts }, conversionId);

    return res.status(201).json(
        new ApiResponse(`Conversion Updated Successfully`, 201, [])
    )

});






export const deleteConversion = CatchAsyncError(async (req: Request, res: Response, next: NextFunction) => {

    const conversionId = req.params.conversionId;


    const findId = await ConversionService.getConversionById(conversionId);

    if (!findId) {
        throw new ApiError("Resource not found", 404);
    }

    const response = await ConversionService.deleteConversion(conversionId);

    return res.status(201).json(
        new ApiResponse(`Conversion Updated Successfully`, 201, [])
    )

});



export const toggleConversion = CatchAsyncError(async (req: Request, res: Response, next: NextFunction) => {

    const conversionId = req.params.conversionId;
    const adsType = req.params.adsId as "exo" | "ts"

    const findId = await ConversionService.getConversionById(conversionId);

    if (!findId) {
        throw new ApiError("Resource not found", 404);
    }

    const tfValues = findId[adsType];

    const response = await ConversionService.toggleConversion({
        ads: adsType,
        val: !tfValues,
    }, conversionId);

    return res.status(201).json(
        new ApiResponse(`Conversion Updated Successfully`, 201, [])
    )

});