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

class VentasPeriodo extends MY_Controller {

    private $meses = array(
        1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril',
        5 => 'Mayo', 6 => 'Junio', 7 => 'Julio', 8 => 'Agosto',
        9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre'
    );

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

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

        $anio_actual = (int)($this->input->get('anio', TRUE) ?: date('Y'));

        $datos_actual   = $this->VentasPeriodo_model->totales_por_mes($anio_actual);
        $datos_anterior = $this->VentasPeriodo_model->totales_por_mes($anio_actual - 1);
        $top_clientes   = $this->VentasPeriodo_model->top_clientes($anio_actual, 5);
        $anios_disp     = $this->VentasPeriodo_model->listar_anios_disponibles();

        // Asegurar que el año actual y anterior estén disponibles como opción
        if (!in_array($anio_actual, $anios_disp))     $anios_disp[] = $anio_actual;
        if (!in_array($anio_actual - 1, $anios_disp)) $anios_disp[] = $anio_actual - 1;
        rsort($anios_disp);
        $anios_disp = array_unique($anios_disp);

        // Construir filas mensuales con comparación
        $filas = array();
        $total_actual    = 0.0;
        $total_anterior  = 0.0;
        $total_comp_act  = 0;

        foreach ($this->meses as $num => $nombre) {
            $act  = $datos_actual[$num];
            $ant  = $datos_anterior[$num];

            $variacion = null;
            if ($ant['total'] > 0) {
                $variacion = (($act['total'] - $ant['total']) / $ant['total']) * 100;
            } elseif ($act['total'] > 0) {
                $variacion = 100; // de 0 a algo > 0
            }

            $filas[] = array(
                'mes'             => $nombre,
                'comprobantes'    => $act['total_comprobantes'],
                'total_actual'    => $act['total'],
                'total_anterior'  => $ant['total'],
                'variacion'       => $variacion,
            );

            $total_actual   += $act['total'];
            $total_anterior += $ant['total'];
            $total_comp_act += $act['total_comprobantes'];
        }

        $variacion_total = null;
        if ($total_anterior > 0) {
            $variacion_total = (($total_actual - $total_anterior) / $total_anterior) * 100;
        } elseif ($total_actual > 0) {
            $variacion_total = 100;
        }

        $data['titulo']           = 'Ventas por Período';
        $data['anio_actual']      = $anio_actual;
        $data['anios_disponibles']= $anios_disp;
        $data['filas']            = $filas;
        $data['total_actual']     = $total_actual;
        $data['total_anterior']   = $total_anterior;
        $data['variacion_total']  = $variacion_total;
        $data['total_comp_act']   = $total_comp_act;
        $data['top_clientes']     = $top_clientes;
        $data['fecha_reporte']    = date('d/m/Y H:i');
        $data['empresa']          = $this->Empresa_model->obtener_activa();

        $this->layout('ventas/ventas_periodo/index', $data);
    }
}
