<?php

namespace App\Models;

use CodeIgniter\Model;

class DashboardModel extends Model
{
    protected $DBGroup = 'default';

    /**
     * Retorna todas las estadísticas del dashboard
     */
    public function getDashboardStats(): array
    {
        return [
            'cantidad_organizaciones' => $this->countOrganizaciones(),
            'cantidad_usuarios'       => $this->countUsuarios(),
            'tickets_pendientes'      => $this->countTicketsPendientesFormulario2(),
            'proximos_eventos'        => $this->getProximosEventos(),
            'ultimos_tickets'         => $this->getUltimosTicketsPendientes(),   
            'ultimos_movimientos'     => $this->getUltimosHistorial(),
        ];
    }

    // =========================
    // CONTADORES
    // =========================

    private function countOrganizaciones(): int
    {
        return $this->db->table('organizacion')
            ->where('deleted_at', null)
            ->countAllResults();
    }

    private function countUsuarios(): int
    {
        return $this->db->table('usuario')
            ->where('deleted_at', null)
            ->countAllResults();
    }

    /**
     * Tickets pendientes del formulario_id = 2
     */
    private function countTicketsPendientesFormulario2(): int
    {
        return $this->db->table('respuestas')
            ->where('estado', 'pendiente')
            ->where('formulario_id', 2)
            ->countAllResults();
    }

    private function getUltimosTicketsPendientes(): array
    {
        return $this->db->table('respuestas')
            ->select('id, item, fecha_creacion, estado')
            ->where('estado', 'pendiente')
            ->where('formulario_id', 2)
            ->orderBy('fecha_creacion', 'DESC')
            ->limit(5)
            ->get()
            ->getResultArray();
    }


    // =========================
    // EVENTOS
    // =========================

    private function getProximosEventos(): array
    {
        return $this->db->table('evento e')
            ->select('
                e.id,
                e.nombre,
                e.descripcion,
                e.fecha_inicio,
                e.fecha_fin,
                e.ubicacion,
                e.color,
                o.nombre as organizacion,
                e.imagen
            ')
            ->join('organizacion o', 'o.id = e.organizacion_id', 'left')
            ->where('e.activo', 1)
            ->where('e.fecha_inicio >=', date('Y-m-d H:i:s'))
            ->orderBy('e.fecha_inicio', 'ASC')
            ->limit(5)
            ->get()
            ->getResultArray();
    }

    // =========================
    // HISTORIAL DE RESPUESTAS
    // =========================

    private function getUltimosHistorial(): array
    {
        $rows = $this->db->table('respuestas_historial rh')
            ->select('
                rh.id,
                rh.fecha_modificacion,
                rh.item_id,
                o.nombre as organizacion,
                rh.usuario_creador
            ')
            ->join('organizacion o', 'o.id = rh.item_id', 'left')
            ->orderBy('rh.fecha_modificacion', 'DESC')
            ->limit(5)
            ->get()
            ->getResultArray();

        foreach ($rows as &$row) {
            $usuario = json_decode($row['usuario_creador'], true);

            $row['usuario_nombre'] = $usuario['nombre'] ?? 'Desconocido';
            $row['usuario_email']  = $usuario['email'] ?? '';
        }

        return $rows;
    }
}
