<?php
/**
 * ASISMA CRM - Regiones Controller
 */
class RegionesController extends Controller {

    public function index() {
        $db = Database::getInstance();
        $regiones = $db->fetchAll(
            "SELECT r.*,
                    (SELECT COUNT(*) FROM franquiciados f WHERE f.region_id = r.id) AS total_franquiciados,
                    (SELECT COUNT(*) FROM leads l WHERE l.region_id = r.id AND l.activo = 1) AS total_leads
             FROM regiones r
             ORDER BY r.id ASC"
        );

        $this->render('regiones/index', [
            'title' => 'Gestión de Regiones (Geografía)',
            'regiones' => $regiones
        ]);
    }

    public function crear() {
        $nombre = trim($this->input('nombre', ''));
        $codigo = trim($this->input('codigo', ''));

        if ($nombre === '') {
            $this->json(array('success' => false, 'message' => 'El nombre de la región es obligatorio.'));
        }

        $db = Database::getInstance();
        $existe = $db->fetchOne("SELECT id FROM regiones WHERE nombre = :n", array('n' => $nombre));
        if ($existe) {
            $this->json(array('success' => false, 'message' => 'Ya existe una región con ese nombre.'));
        }

        $id = $db->insert('regiones', array(
            'nombre' => $nombre,
            'codigo' => $codigo !== '' ? $codigo : null,
            'activa' => 1
        ));

        AuditHelper::log('create_region', 'regiones', $id, null, array('nombre' => $nombre));
        $this->json(array('success' => true, 'message' => 'Región creada.'));
    }

    public function editar() {
        $id     = (int)$this->input('id', 0);
        $nombre = trim($this->input('nombre', ''));
        $codigo = trim($this->input('codigo', ''));

        if ($id <= 0 || $nombre === '') {
            $this->json(array('success' => false, 'message' => 'Datos incompletos.'));
        }

        $db = Database::getInstance();
        $region = $db->fetchOne("SELECT * FROM regiones WHERE id = :id", array('id' => $id));
        if (!$region) {
            $this->json(array('success' => false, 'message' => 'Región no encontrada.'));
        }

        $db->update('regiones', array(
            'nombre' => $nombre,
            'codigo' => $codigo !== '' ? $codigo : null
        ), "id = :id", array('id' => $id));

        AuditHelper::log('edit_region', 'regiones', $id, array('nombre' => $region['nombre']), array('nombre' => $nombre));
        $this->json(array('success' => true, 'message' => 'Región actualizada.'));
    }

    public function toggleActiva() {
        $id = (int)$this->input('id', 0);
        $db = Database::getInstance();

        $region = $db->fetchOne("SELECT * FROM regiones WHERE id = :id", array('id' => $id));
        if (!$region) {
            $this->json(array('success' => false, 'message' => 'Región no encontrada.'));
        }

        // No permitir desactivar si tiene franquiciados activos operando
        if ($region['activa']) {
            $enUso = $db->fetchOne(
                "SELECT COUNT(*) AS n FROM franquiciados WHERE region_id = :id AND estado = 'activo'",
                array('id' => $id)
            );
            if ($enUso && $enUso['n'] > 0) {
                $this->json(array('success' => false, 'message' => 'No se puede desactivar: hay ' . $enUso['n'] . ' franquiciado(s) activo(s) operando en esta región.'));
            }
        }

        $nueva = $region['activa'] ? 0 : 1;
        $db->update('regiones', array('activa' => $nueva), "id = :id", array('id' => $id));

        AuditHelper::log('toggle_region', 'regiones', $id, array('activa' => $region['activa']), array('activa' => $nueva));
        $this->json(array('success' => true, 'message' => $nueva ? 'Región activada.' : 'Región desactivada.'));
    }
}
