<?php
header('Content-Type: application/json; charset=UTF-8');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

try {
    $host = 'localhost';
    $dbname = 'CORREOS';
    $user = 'root';
    $pass = 'root';

    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]);

    $inserted = false;

    // Si vienen correos por POST (tu lógica de inserción original)
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $remitente    = $_POST['remitente'] ?? 'correo@ejemplo.com';
        $destinatario = $_POST['destinatario'] ?? 'destino@ejemplo.com';
        $asunto       = $_POST['asunto'] ?? 'Sin asunto';
        $mensaje      = $_POST['mensaje'] ?? 'Mensaje vacío';
        $estado       = $_POST['estado'] ?? 'RECIBIDO';
        $adjuntoUrl   = $_POST['adjunto'] ?? '';
        $firma        = $_POST['firma'] ?? '';
        $messageId    = $_POST['message_id'] ?? uniqid('msg_', true);
        $nombre       = $_POST['nombre'] ?? 'Cliente Genérico';
        $asesor       = $_POST['asesor'] ?? 'Sin asignar';
        $area         = $_POST['area'] ?? '';

        $sqlInsert = "INSERT INTO CORREO 
            (REMITENTE, DESTINATARIO, ASUNTO, MENSAJE, FECHA_ENVIO, ESTADO, ADJUNTO, FIRMA, MESSAGE_ID, NOMBRE, ES_NUEVO, ASESOR, AREA)
            VALUES (:remitente, :destinatario, :asunto, :mensaje, NOW(), :estado, :adjunto, :firma, :message_id, :nombre, 'S', :asesor, :area)";

        $stmt = $pdo->prepare($sqlInsert);
        $stmt->execute([
            ':remitente'    => $remitente,
            ':destinatario' => $destinatario,
            ':asunto'       => $asunto,
            ':mensaje'      => $mensaje,
            ':estado'       => $estado,
            ':adjunto'      => $adjuntoUrl,
            ':firma'        => $firma,
            ':message_id'   => $messageId,
            ':nombre'       => $nombre,
            ':asesor'       => $asesor,
            ':area'         => $area
        ]);

        $inserted = true;
        $newId = $pdo->lastInsertId();

        // Compatibilidad: si al insertar mandaron "area", también la guardamos como asignación en CORREO_AREAS
        if (!empty($area)) {
            // prevenir duplicados si ya existe (opcional; si tienes UNIQUE (ID_CORREO, AREA) en la tabla, puedes usar INSERT IGNORE o control de errores)
            $stmtA = $pdo->prepare("INSERT INTO CORREO_AREAS (ID_CORREO, AREA, ESTADO, NOTA) VALUES (:id, :area, :estado, :nota)");
            $stmtA->execute([
                ':id' => $newId,
                ':area' => $area,
                ':estado' => $estado,
                ':nota' => null
            ]);
        }
    }

    // Si te interesa filtrar por área en el backend: usar ?area=ventas
    $filterArea = isset($_GET['area']) ? trim($_GET['area']) : null;

    if ($filterArea) {
        // Devuelve todos los correos que estén asignados a $filterArea (tanto en CORREO_AREAS como en el campo AREA de CORREO)
        $sqlSelect = "
            SELECT 
                c.ID_CORREO,
                c.REMITENTE,
                c.DESTINATARIO,
                c.ASUNTO,
                c.MENSAJE,
                c.FECHA_ENVIO,
                COALESCE(ca.AREA, c.AREA) AS AREA,
                COALESCE(ca.ESTADO, c.ESTADO) AS ESTADO,
                COALESCE(ca.NOTA, '') AS NOTA,
                c.ADJUNTO,
                c.FIRMA,
                c.MESSAGE_ID,
                c.NOMBRE,
                c.ES_NUEVO,
                c.ASESOR,
                c.DESTACADO,
                ca.FECHA_ASIGNACION
            FROM CORREO c
            LEFT JOIN CORREO_AREAS ca ON c.ID_CORREO = ca.ID_CORREO
            WHERE (ca.AREA = :area OR c.AREA = :area)
            ORDER BY c.FECHA_ENVIO DESC
        ";
        $stmt = $pdo->prepare($sqlSelect);
        $stmt->execute([':area' => $filterArea]);
    } else {
        // Trae todo: si un correo tiene N asignaciones en CORREO_AREAS, aparecerá N veces (una por área)
        $sqlSelect = "
            SELECT 
                c.ID_CORREO,
                c.REMITENTE,
                c.DESTINATARIO,
                c.ASUNTO,
                c.MENSAJE,
                c.FECHA_ENVIO,
                COALESCE(ca.AREA, c.AREA) AS AREA,
                COALESCE(ca.ESTADO, c.ESTADO) AS ESTADO,
                COALESCE(ca.NOTA, '') AS NOTA,
                c.ADJUNTO,
                c.FIRMA,
                c.MESSAGE_ID,
                c.NOMBRE,
                c.ES_NUEVO,
                c.ASESOR,
                c.DESTACADO,
                ca.FECHA_ASIGNACION
            FROM CORREO c
            LEFT JOIN CORREO_AREAS ca ON c.ID_CORREO = ca.ID_CORREO
            ORDER BY c.FECHA_ENVIO DESC
        ";
        $stmt = $pdo->query($sqlSelect);
    }

    $correos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Ajustar ruta de adjuntos si hace falta
    foreach ($correos as &$correo) {
        if (!empty($correo['ADJUNTO']) && !str_starts_with($correo['ADJUNTO'], 'uploads/')) {
            $correo['ADJUNTO'] = 'uploads/' . $correo['ADJUNTO'];
        }
    }
    unset($correo);

    echo json_encode([
        'success' => true,
        'inserted' => $inserted,
        'correos' => $correos
    ], JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
