<?php

class ControladorTransacciones {

    /*=============================================
    CREAR TRANSACCIÓN
    =============================================*/
    static public function ctrCrearTransaccion() {

        if (isset($_POST["nuevaFecha"])) {

            if (
                is_numeric($_POST["nuevoMonto"]) &&
                isset($_POST["nuevoMetodoPago"]) &&
                isset($_POST["nuevoTipoTransaccion"])
            ) {

                $tabla = "transacciones";

                $datos = array(
                    "monto" => $_POST["nuevoMonto"],
                    "fecha" => $_POST["nuevaFecha"],
                    "descripcion" => $_POST["nuevaDescripcion"],
                    "referencia" => $_POST["nuevaReferencia"],
                    "id_usuario" => $_SESSION["id_usuario"] ?? 1,
                    "id_tipo_transaccion" => $_POST["nuevoTipoTransaccion"],
                    "metodo_pago" => $_POST["nuevoMetodoPago"]
                );

                $respuesta = ModeloTransacciones::mdlIngresarTransaccion($tabla, $datos);

                if ($respuesta == "ok") {
                    echo '<script>
                        swal({
                            type: "success",
                            title: "¡La transacción ha sido registrada correctamente!",
                            confirmButtonText: "Cerrar"
                        }).then(function(result){
                            if(result.value){
                                window.location = "transacciones";
                            }
                        });
                    </script>';
                }

            } else {
                echo '<script>
                    swal({
                        type: "error",
                        title: "¡Datos inválidos!",
                        confirmButtonText: "Cerrar"
                    }).then(function(result){
                        if(result.value){
                            window.location = "transacciones";
                        }
                    });
                </script>';
            }
        }
    }
    
    /*=============================================
    MOSTRAR TODAS LAS TRANSACCIONES
    =============================================*/
    static public function ctrMostrarTransacciones($fechaInicio = null, $fechaFin = null, $tipoTransaccion = null) {

        $tabla = "transacciones";
        


        // Convertimos 1 y 2 a sus equivalentes string según la base de datos
        if ($tipoTransaccion == "1") {
            $tipoTransaccion = "ingreso";
        } elseif ($tipoTransaccion == "2") {
            $tipoTransaccion = "gasto";
        } else {
            $tipoTransaccion = null;
        }

        return ModeloTransacciones::mdlMostrarTransacciones($tabla, $fechaInicio, $fechaFin, $tipoTransaccion);
    }



    /*=============================================
    MOSTRAR TIPOS DE TRANSACCIÓN (Ingreso/Gasto)
    =============================================*/
    static public function ctrMostrarTiposTransaccion() {
        $tabla = "tipo_transaccion";
        return ModeloTransacciones::mdlMostrarTiposTransaccion($tabla);
    }
    
        static public function ctrMostrarUnaTransaccion($id) {
        $tabla = "transacciones";
        return ModeloTransacciones::mdlMostrarUnaTransaccion($tabla, $id);
    }

    /*=============================================
    EDITAR TRANSACCIÓN
    =============================================*/
    static public function ctrEditarTransaccion(){

        if(isset($_POST["idTransaccion"])){

            $tabla = "transacciones";

            $datos = array(
                "id_transaccion" => $_POST["idTransaccion"],
                "monto" => $_POST["editarMonto"],
                "fecha" => $_POST["editarFecha"],
                "descripcion" => $_POST["editarDescripcion"],
                "referencia" => $_POST["editarReferencia"],
                "metodo_pago" => $_POST["editarMetodoPago"],
                "id_tipo_transaccion" => $_POST["editarTipoTransaccion"]
            );

            $respuesta = ModeloTransacciones::mdlEditarTransacciones($tabla, $datos);

            if($respuesta == "ok"){
                echo '<script>
                    swal({
                        type: "success",
                        title: "La transacción ha sido editada correctamente",
                        showConfirmButton: true,
                        confirmButtonText: "Cerrar"
                    }).then((result)=>{
                        if(result.value){
                            window.location = "transacciones";
                        }
                    });
                </script>';
            }
        }
    }
    
        /*=============================================
    ELIMINAR TRANSACCIÓN
    =============================================*/
    static public function ctrEliminarTransaccion($id) {

        $tabla = "transacciones";

        $respuesta = ModeloTransacciones::mdlEliminarTransaccion($tabla, $id);

        return $respuesta;
    }
    
     /*=============================================
    INGRESAR TIPO DE TRANSACCION
    =============================================*/
    static public function ctrIngresarTipoTransaccion() {

        if(isset($_POST["nuevoNombre"])) {

            $nombre = $_POST["nuevoNombre"];
            $descripcion = $_POST["nuevaDescripcion"];
            $tipo = strtolower($_POST["nuevoTipo"]);  // Convertimos el tipo a minúsculas
            $tabla = "tipo_transaccion";

            // Aquí asegúrate de validar que todos los campos no estén vacíos
            if($nombre != "" && $descripcion != "" && $tipo != "") {
                // Aquí iría la lógica para guardar los datos en la base de datos.
                // Asegúrate de tener el modelo de "Tipo de Transacción"
                $datos = array("nombre" => $nombre, "descripcion" => $descripcion, "tipo" => $tipo);

                // Llamar al modelo para insertar los datos
                $respuesta = ModeloTransacciones::mdlIngresarTipoTransaccion($tabla, $datos);

                // Verificar si la respuesta es positiva y dar retroalimentación al usuario
                if($respuesta == "ok") {
                    echo '<script>
                            swal({
                                type: "success",
                                title: "¡Tipo de Transacción creado correctamente!",
                                showConfirmButton: true,
                                confirmButtonText: "Cerrar"
                            }).then(function(result){
                                if(result.value){
                                    window.location = "configuraciones";
                                }
                            });
                          </script>';
                }
            }
        }
    }

    /*=============================================
    EDITAR TIPO DE TRANSACCION
    =============================================*/
    static public function ctrEditarTipoTransaccion() {

        if (isset($_POST["editarNombre"]) && isset($_POST["editarDescripcion"]) && isset($_POST["editarTipo"])) {

            $tabla = "tipo_transaccion"; // corregido: el nombre correcto de la tabla
            $datos = array(
                "id" => $_POST["idTipoEditar"], // este es el id que viene del formulario
                "nombre" => $_POST["editarNombre"],
                "descripcion" => $_POST["editarDescripcion"],
                "tipo" => strtolower($_POST["editarTipo"]) // nos aseguramos de que sea 'ingreso' o 'gasto'
            );

            $respuesta = ModeloTransacciones::mdlEditarTipoTransaccion($tabla, $datos);

            if ($respuesta == "ok") {
                echo '<script>
                    swal({
                        type: "success",
                        title: "El tipo de transacción ha sido actualizado correctamente",
                        showConfirmButton: true,
                        confirmButtonText: "Cerrar"
                    }).then((result) => {
                        if (result.value) {
                            window.location = "configuraciones";
                        }
                    });
                </script>';
            } else {
                echo '<script>
                    swal({
                        type: "error",
                        title: "Hubo un error al actualizar",
                        showConfirmButton: true,
                        confirmButtonText: "Cerrar"
                    });
                </script>';
            }
        }
    }

    /*=============================================
    ELIMINAR TIPO DE TRANSACCION
    =============================================*/
    static public function ctrEliminarTipoTransaccion($id) {
        $tabla = "tipo_transaccion";
        $respuesta = ModeloTransacciones::mdlEliminarTipoTransaccion($tabla, $id);
        return $respuesta;
    }

    static public function ctrMostrarUnTipoTransaccion($id) {
        $tabla = "tipo_transaccion";
        return ModeloTransacciones::mdlMostrarUnTipoTransaccion($tabla, $id);
    }

    static public function ctrResumenFinancieroAnual($anio) {
        // Verifica si el parámetro $anio es nulo o vacío, y usa el año actual como valor predeterminado
        $anio = empty($anio) ? date('Y') : $anio;

        // Llama al método del modelo para obtener el resumen financiero anual
        $resumen = ModeloTransacciones::mdlResumenFinancieroAnual("transacciones", $anio);

        // Retorna el resumen obtenido del modelo
        return $resumen;
    }
    
    public static function ctrBalanceMensual($anio) {
        $tabla = "transacciones";
        $resumen = ModeloTransacciones::mdlBalanceMensual($tabla, $anio);

        // Organizar los datos por mes
        $ingresos = [];
        $gastos = [];
        foreach ($resumen as $mes) {
            $ingresos[] = $mes['total_ingresos'];
            $gastos[] = $mes['total_gastos'];
        }

        // Devolver los datos en formato JSON para usar en el gráfico
        return json_encode([
            "meses" => ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
            "ingresos" => $ingresos,
            "gastos" => $gastos
        ]);
    }
    
    static public function ctrResumenGastosMensual($anio, $mes) {
        $tabla = "transacciones";
        $respuesta = ModeloTransacciones::mdlObtenerResumenGastos($tabla, $anio, $mes);
        return $respuesta;
    }
  
    static public function ctrDetalleGastosMensuales($anio, $mes) {
        return ModeloTransacciones::mdlDetalleGastosMensuales("transacciones", $anio, $mes);
    }
    
    // Función en el Controlador: ctrDetalleIngresos($anio, $mes)
    static public function ctrDetalleIngresos($anio, $mes) {
        // Llamamos al modelo
        return ModeloTransacciones::mdlDetalleIngresos($anio, $mes);
    }
    
    // Función en el Controlador: ctrDetalleGastos($anio, $mes)
    static public function ctrDetalleGastos($anio, $mes) {
        // Llamamos al modelo
        return ModeloTransacciones::mdlDetalleGastos($anio, $mes);
    }


}
