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

class VentasPeriodo_model extends CI_Model {

    // Estados considerados como venta válida (EMITIDO / COBRADO / ENVIADO)
    private $estados_validos = array(23, 26, 27);

    public function totales_por_mes($anio) {
        $this->db->select("
            MONTH(c.fecha) as mes,
            COUNT(*) as total_comprobantes,
            SUM(c.subtotal) as subtotal,
            SUM(c.igv) as igv,
            SUM(c.total) as total
        ", FALSE);
        $this->db->from('vt_comprobante c');
        $this->db->where('YEAR(c.fecha)', $anio);
        $this->db->where_in('c.estado_id', $this->estados_validos);
        $this->db->group_by('MONTH(c.fecha)');
        $rows = $this->db->get()->result();

        // Indexar por mes 1-12, llenando con ceros los meses sin datos
        $data = array();
        for ($m = 1; $m <= 12; $m++) {
            $data[$m] = array(
                'total_comprobantes' => 0,
                'subtotal'           => 0.0,
                'igv'                => 0.0,
                'total'              => 0.0,
            );
        }
        foreach ($rows as $r) {
            $data[(int)$r->mes] = array(
                'total_comprobantes' => (int)$r->total_comprobantes,
                'subtotal'           => (float)$r->subtotal,
                'igv'                => (float)$r->igv,
                'total'              => (float)$r->total,
            );
        }
        return $data;
    }

    public function top_clientes($anio, $limite = 5) {
        $this->db->select("
            cl.razon_social as cliente,
            COUNT(*) as total_comprobantes,
            SUM(c.total) as total
        ", FALSE);
        $this->db->from('vt_comprobante c');
        $this->db->join('vt_cliente cl', 'cl.id = c.cliente_id');
        $this->db->where('YEAR(c.fecha)', $anio);
        $this->db->where_in('c.estado_id', $this->estados_validos);
        $this->db->group_by('c.cliente_id');
        $this->db->order_by('total', 'DESC');
        $this->db->limit($limite);
        return $this->db->get()->result();
    }

    public function listar_anios_disponibles() {
        $rows = $this->db
            ->select('DISTINCT YEAR(fecha) as anio', FALSE)
            ->from('vt_comprobante')
            ->where_in('estado_id', $this->estados_validos)
            ->order_by('anio', 'DESC')
            ->get()->result();

        $anios = array();
        foreach ($rows as $r) {
            $anios[] = (int)$r->anio;
        }
        if (empty($anios)) {
            $anios[] = (int)date('Y');
        }
        return $anios;
    }
}
