<?php

class Ticket {
    /**
     * @var PDO
     */
    private $pdo;

    /**
     * Constructor: Recibe la conexión PDO desde database.php
     * @param PDO $pdo
     */
    public function __construct($pdo) {
        $this->pdo = $pdo;
    }

    /**
     * Registra un nuevo mensaje o foto en el historial del ticket
     * * @param int $id_ticket
     * @param int $id_usuario
     * @param string|null $mensaje
     * @param string|null $foto Nombre del archivo guardado en el servidor
     * @return bool
     */
    public function insertarSeguimiento($id_ticket, $id_usuario, $mensaje, $foto = null) {
        try {
            $sql = "INSERT INTO ticket_seguimiento (id_ticket, id_autor, mensaje, foto, fecha) 
                    VALUES (?, ?, ?, ?, NOW())";
            
            $stmt = $this->pdo->prepare($sql);
            
            return $stmt->execute([
                $id_ticket, 
                $id_usuario, 
                $mensaje, 
                $foto
            ]);
        } catch (PDOException $e) {
            
            //echo "".$e;
            error_log("Error en Ticket Model (insertarSeguimiento): " . $e->getMessage());
            return false;
        }
    }

    /**
     * Obtiene todos los comentarios y fotos asociados a un ticket
     * * @param int $id_ticket
     * @return array
     */
    public function listarSeguimientos($id_ticket) {
    try {
        // Limpiamos el ID por seguridad
        $id_ticket = (int)$id_ticket;

        // Intentamos una consulta más robusta. 
        // Asegúrate de que en tu tabla 'ticket_seguimientos' la columna sea 'id_usuario'
        $sql = "SELECT s.*, u.nombre as autor 
                FROM ticket_seguimiento s
                INNER JOIN usuarios u ON s.id_autor = u.id
                WHERE s.id_ticket = ?
                ORDER BY s.fecha ASC";
                
              //  echo $sql;
        
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute([$id_ticket]);
        
        $resultados = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        // Si no devuelve nada, puede ser que la columna se llame distinto.
        return $resultados ?: []; 

    } catch (PDOException $e) {
        error_log("Error SQL en listarSeguimientos: " . $e->getMessage());
        return [];
    }
}

    /**
     * Actualiza la fecha de última actividad del ticket principal
     * Útil para saber qué tickets han tenido movimiento reciente
     * * @param int $id_ticket
     * @return bool
     */
    public function marcarActividadReciente($id_ticket) {
        try {
            $sql = "UPDATE tickets SET fecha_actualizacion = NOW() WHERE id = ?";
            $stmt = $this->pdo->prepare($sql);
            return $stmt->execute([$id_ticket]);
        } catch (PDOException $e) {
            error_log("Error en Ticket Model (marcarActividadReciente): " . $e->getMessage());
            return false;
        }
    }

    /**
     * Obtiene la información básica de un ticket por su ID
     * (Usado para verificar existencia antes de cargar la vista)
     */
    public function obtenerPorId($id_ticket) {
        try {
            $sql = "SELECT * FROM tickets WHERE id = ?";
            $stmt = $this->pdo->prepare($sql);
            $stmt->execute([$id_ticket]);
            return $stmt->fetch(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            return false;
        }
    }
    
    public function obtenerDetalleParaEmail($id_ticket) {
    $sql = "SELECT t.titulo, u.correo as email_solicitante 
            FROM tickets t 
            JOIN usuarios u ON t.id_solicitante = u.id 
            WHERE t.id = ?";
    $stmt = $this->pdo->prepare($sql);
    $stmt->execute([$id_ticket]);
    return $stmt->fetch(PDO::FETCH_ASSOC);
}
}

?>