<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class FlujoCaja extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('finanzas/FlujoCaja_model');
        $this->load->model('configuracion/Empresa_model');
    }

    public function index() {
        $this->validar_permiso('flujo_caja_ver');

        // Período seleccionado — por defecto mes actual
        $mes = (int)($this->input->get('mes') ?: date('m'));
        $año = (int)($this->input->get('anio') ?: date('Y'));

        // Rango libre opcional
        $desde_custom = $this->input->get('desde');
        $hasta_custom  = $this->input->get('hasta');

        if ($desde_custom && $hasta_custom) {
            $desde = $desde_custom;
            $hasta = $hasta_custom;
            $modo  = 'rango';
        } else {
            $desde = date('Y-m-d', mktime(0, 0, 0, $mes, 1, $año));
            $hasta = date('Y-m-t', mktime(0, 0, 0, $mes, 1, $año));
            $modo  = 'mes';
        }

        // Saldo inicial
        $saldo_inicial = $this->FlujoCaja_model->calcular_saldo_inicial($desde);

        // Totales del período
        $total_cobros    = $this->FlujoCaja_model->total_cobros_clientes($desde, $hasta);
        $total_ing_caja  = $this->FlujoCaja_model->total_ingresos_caja($desde, $hasta);
        $total_pag_prov  = $this->FlujoCaja_model->total_pagos_proveedores($desde, $hasta);
        $total_egr_caja  = $this->FlujoCaja_model->total_egresos_caja($desde, $hasta);

        $total_ingresos = $total_cobros + $total_ing_caja;
        $total_egresos  = $total_pag_prov + $total_egr_caja;
        $saldo_final    = $saldo_inicial + $total_ingresos - $total_egresos;

        // Detalle para las pestañas
        $cobros_clientes    = $this->FlujoCaja_model->ingresos_cobros_clientes($desde, $hasta);
        $ingresos_caja      = $this->FlujoCaja_model->ingresos_caja_chica($desde, $hasta);
        $pagos_proveedores  = $this->FlujoCaja_model->egresos_pagos_proveedores($desde, $hasta);
        $egresos_caja       = $this->FlujoCaja_model->egresos_caja_chica($desde, $hasta);

        // Proyectado
        $por_cobrar = $this->FlujoCaja_model->proyectado_por_cobrar();
        $por_pagar  = $this->FlujoCaja_model->proyectado_por_pagar();

        $tramos_cobrar = $this->FlujoCaja_model->agrupar_por_tramo($por_cobrar, 'dias_restantes');
        $tramos_pagar  = $this->FlujoCaja_model->agrupar_por_tramo($por_pagar, 'dias_restantes');

        $total_proyectado_cobrar = array_sum(array_column($tramos_cobrar, 'total'));
        $total_proyectado_pagar  = array_sum(array_column($tramos_pagar, 'total'));

        $data['titulo']                  = 'Flujo de Caja';
        $data['mes']                     = $mes;
        $data['año']                     = $año;
        $data['desde']                   = $desde;
        $data['hasta']                   = $hasta;
        $data['modo']                    = $modo;
        $data['desde_custom']            = $desde_custom;
        $data['hasta_custom']            = $hasta_custom;
        $data['saldo_inicial']           = $saldo_inicial;
        $data['total_ingresos']          = $total_ingresos;
        $data['total_egresos']           = $total_egresos;
        $data['saldo_final']             = $saldo_final;
        $data['total_cobros']            = $total_cobros;
        $data['total_ing_caja']          = $total_ing_caja;
        $data['total_pag_prov']          = $total_pag_prov;
        $data['total_egr_caja']          = $total_egr_caja;
        $data['cobros_clientes']         = $cobros_clientes;
        $data['ingresos_caja']           = $ingresos_caja;
        $data['pagos_proveedores']       = $pagos_proveedores;
        $data['egresos_caja']            = $egresos_caja;
        $data['tramos_cobrar']           = $tramos_cobrar;
        $data['tramos_pagar']            = $tramos_pagar;
        $data['total_proyectado_cobrar'] = $total_proyectado_cobrar;
        $data['total_proyectado_pagar']  = $total_proyectado_pagar;

        $this->layout('finanzas/flujo_caja/index', $data);
    }

    // -------------------------------------------------------
    // REPORTE IMPRIMIBLE
    // -------------------------------------------------------
    public function reporte() {
        $this->validar_permiso('flujo_caja_ver');

        $mes   = (int)($this->input->get('mes')  ?: date('m'));
        $año   = (int)($this->input->get('anio') ?: date('Y'));
        $desde = $this->input->get('desde') ?: date('Y-m-d', mktime(0, 0, 0, $mes, 1, $año));
        $hasta = $this->input->get('hasta') ?: date('Y-m-t', mktime(0, 0, 0, $mes, 1, $año));

        $saldo_inicial = $this->FlujoCaja_model->calcular_saldo_inicial($desde);

        $total_cobros   = $this->FlujoCaja_model->total_cobros_clientes($desde, $hasta);
        $total_ing_caja = $this->FlujoCaja_model->total_ingresos_caja($desde, $hasta);
        $total_pag_prov = $this->FlujoCaja_model->total_pagos_proveedores($desde, $hasta);
        $total_egr_caja = $this->FlujoCaja_model->total_egresos_caja($desde, $hasta);

        $total_ingresos = $total_cobros + $total_ing_caja;
        $total_egresos  = $total_pag_prov + $total_egr_caja;
        $saldo_final    = $saldo_inicial + $total_ingresos - $total_egresos;

        // Detalle de movimientos para el reporte
        $cobros_clientes   = $this->FlujoCaja_model->ingresos_cobros_clientes($desde, $hasta);
        $ingresos_caja     = $this->FlujoCaja_model->ingresos_caja_chica($desde, $hasta);
        $pagos_proveedores = $this->FlujoCaja_model->egresos_pagos_proveedores($desde, $hasta);
        $egresos_caja      = $this->FlujoCaja_model->egresos_caja_chica($desde, $hasta);

        $por_cobrar = $this->FlujoCaja_model->proyectado_por_cobrar();
        $por_pagar  = $this->FlujoCaja_model->proyectado_por_pagar();

        $data['desde']             = $desde;
        $data['hasta']             = $hasta;
        $data['saldo_inicial']     = $saldo_inicial;
        $data['total_ingresos']    = $total_ingresos;
        $data['total_egresos']     = $total_egresos;
        $data['saldo_final']       = $saldo_final;
        $data['total_cobros']      = $total_cobros;
        $data['total_ing_caja']    = $total_ing_caja;
        $data['total_pag_prov']    = $total_pag_prov;
        $data['total_egr_caja']    = $total_egr_caja;
        $data['cobros_clientes']   = $cobros_clientes;
        $data['ingresos_caja']     = $ingresos_caja;
        $data['pagos_proveedores'] = $pagos_proveedores;
        $data['egresos_caja']      = $egresos_caja;
        $data['por_cobrar']        = $por_cobrar;
        $data['por_pagar']         = $por_pagar;
        $data['empresa']           = $this->Empresa_model->obtener_activa();

        $this->load->view('finanzas/flujo_caja/reporte', $data);
    }
}