import { Request, Response } from "express";
import { ReportService } from "./report.service";

const service = new ReportService();

export class ReportController {

    async getSummary(
        req:Request,
        res:Response
    ){

        try{

            const summary = await service.getSummary();
            res.json(summary);

        }catch(error){
            res.status(500).json({
                message:"Error al obtener reportes",
                error
            });

        }
    }

    // Reporte de Fuel Request
    async getFuelRequestsReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getFuelRequestReport();

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte de requisiciones.",
                error
            });

        }

    }


    // Reporte de Facturas Externas
    async getExternalInvoicesReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getExternalInvoiceReport();

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte de facturas externas.",
                error
            });

        }

    }

    // Reporte de LPG
    async getLpgReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getLpgReport();

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte de LPG.",
                error
            });

        }

    }

    // Reporte de Anomalías
    async getAnomaliesReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getAnomaliesReport();

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte de anomalías.",
                error
            });

        }

    }

    // Reporte de Lecturas de Bomba
    async getPumpReadingsReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getPumpReadingsReport();

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte de lecturas de bomba.",
                error
            });

        }

    }

    // Reporte por Vehículo
    async getVehicleReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getVehicleReport(
                    Number(req.params.vehicleId)
                );

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte por vehículo.",
                error
            });

        }

    }

    // Reporte por Empleado
    async getEmployeeReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getEmployeeReport(
                    Number(req.params.employeeId)
                );

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte por empleado.",
                error
            });

        }

    }

    // Reporte por Departamento
    async getDepartmentReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getDepartmentReport(
                    Number(req.params.departmentId)
                );

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte por departamento.",
                error
            });

        }

    }

    // Reporte por Ruta
    async getRouteReport(
        req: Request,
        res: Response
    ) {

        try {

            const report =
                await service.getRouteReport(
                    Number(req.params.routeId)
                );

            res.status(200).json(report);

        } catch (error) {

            res.status(500).json({
                message: "Error al generar el reporte por ruta.",
                error
            });

        }

    }

}