<?php
/**
 * ASISMA CRM - Cobros por Lead (Monetización)
 *
 * Módulo de CONSULTA (solo admin). El modelo de cobro por lead está pendiente
 * de definición comercial: la estructura (tabla cobros_leads) queda preparada
 * y esta vista permite revisar los cobros registrados, sin generación automática.
 */
class CobrosController extends Controller {

    public function index() {
        $db = Database::getInstance();

        $filtroPeriodo = trim($this->input('periodo', ''));
        $filtroEstado  = trim($this->input('estado', ''));

        $where  = "1=1";
        $params = array();
        if ($filtroPeriodo !== '' && preg_match('/^\d{4}-\d{2}$/', $filtroPeriodo)) {
            $where .= " AND cl.periodo = :periodo";
            $params['periodo'] = $filtroPeriodo;
        }
        if (in_array($filtroEstado, array('pendiente', 'cobrado', 'anulado'))) {
            $where .= " AND cl.estado = :estado";
            $params['estado'] = $filtroEstado;
        }

        $cobros = $db->fetchAll(
            "SELECT cl.*, ef.nombre_fantasia AS franquiciado_nombre, c.nombre AS lead_contacto
             FROM cobros_leads cl
             INNER JOIN franquiciados f ON cl.franquiciado_id = f.id
             INNER JOIN empresas_franquiciados ef ON f.empresa_madre_id = ef.id
             LEFT JOIN leads l ON cl.lead_id = l.id
             LEFT JOIN contactos c ON l.contacto_id = c.id
             WHERE {$where}
             ORDER BY cl.created_at DESC
             LIMIT 500",
            $params
        );

        $resumen = $db->fetchOne(
            "SELECT COUNT(*) AS total,
                    SUM(CASE WHEN cl.estado = 'pendiente' THEN cl.monto ELSE 0 END) AS monto_pendiente,
                    SUM(CASE WHEN cl.estado = 'cobrado' THEN cl.monto ELSE 0 END) AS monto_cobrado
             FROM cobros_leads cl
             INNER JOIN franquiciados f ON cl.franquiciado_id = f.id
             WHERE {$where}",
            $params
        );

        $periodos = $db->fetchAll("SELECT DISTINCT periodo FROM cobros_leads ORDER BY periodo DESC");

        $this->render('cobros/index', array(
            'title'         => 'Cobros por Lead',
            'cobros'        => $cobros,
            'resumen'       => $resumen,
            'periodos'      => $periodos,
            'filtroPeriodo' => $filtroPeriodo,
            'filtroEstado'  => $filtroEstado
        ));
    }
}
