<?php
/**
 * API: CRUD de días con facturas PDF y reordenamiento/eliminación
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

require_once __DIR__ . '/../config/db.php';
require_once __DIR__ . '/subir_pdf.php'; // Reutilizar la función concatenarPDFs

$action = $_GET['action'] ?? 'listar';
$method = $_SERVER['REQUEST_METHOD'];

try {
    $pdo = getConnection();

    if ($method === 'POST') {
        $input = json_decode(file_get_contents('php://input'), true);
        $postAction = $input['action'] ?? $action;

        // ── Eliminar un día completo ──
        if ($postAction === 'eliminar_dia') {
            $diaId = intval($input['dia_id'] ?? 0);
            if ($diaId <= 0) throw new Exception("ID de día inválido");

            // Obtener rutas de archivos para borrarlos físicamente
            $stmtFiles = $pdo->prepare("SELECT ruta_archivo FROM factura_archivos_pdf WHERE dia_id = :dia_id");
            $stmtFiles->execute([':dia_id' => $diaId]);
            $files = $stmtFiles->fetchAll();

            $stmtDia = $pdo->prepare("SELECT pdf_concatenado FROM factura_dias_pdf WHERE id = :id");
            $stmtDia->execute([':id' => $diaId]);
            $dia = $stmtDia->fetch();

            $pdo->beginTransaction();

            $stmtDel = $pdo->prepare("DELETE FROM factura_dias_pdf WHERE id = :id");
            $stmtDel->execute([':id' => $diaId]);

            $pdo->commit();

            // Borrar archivos del disco
            $uploadDir = __DIR__ . '/../';
            foreach ($files as $f) {
                $filePath = $uploadDir . $f['ruta_archivo'];
                if (file_exists($filePath)) {
                    @unlink($filePath);
                }
            }

            if ($dia && !empty($dia['pdf_concatenado'])) {
                $concatPath = $uploadDir . $dia['pdf_concatenado'];
                if (file_exists($concatPath)) {
                    @unlink($concatPath);
                }
            }

            echo json_encode(['success' => true, 'message' => "Día y todos sus archivos asociados eliminados correctamente"]);
            exit;
        }

        // ── Eliminar un archivo individual ──
        if ($postAction === 'eliminar_archivo') {
            $archivoId = intval($input['archivo_id'] ?? 0);
            if ($archivoId <= 0) throw new Exception("ID de archivo inválido");

            // Obtener info del archivo
            $stmtFile = $pdo->prepare("SELECT dia_id, ruta_archivo FROM factura_archivos_pdf WHERE id = :id");
            $stmtFile->execute([':id' => $archivoId]);
            $file = $stmtFile->fetch();

            if (!$file) {
                throw new Exception("Archivo no encontrado");
            }

            $diaId = intval($file['dia_id']);
            $ruta = $file['ruta_archivo'];

            $pdo->beginTransaction();

            // Eliminar de la base de datos
            $stmtDel = $pdo->prepare("DELETE FROM factura_archivos_pdf WHERE id = :id");
            $stmtDel->execute([':id' => $archivoId]);

            $pdo->commit();

            // Borrar de disco
            $filePath = __DIR__ . '/../' . $ruta;
            if (file_exists($filePath)) {
                @unlink($filePath);
            }

            // Obtener fecha del día para concatenar
            $stmtDia = $pdo->prepare("SELECT fecha FROM factura_dias_pdf WHERE id = :id");
            $stmtDia->execute([':id' => $diaId]);
            $fecha = $stmtDia->fetchColumn();

            // Re-concatenar
            $concatResult = concatenarPDFs($diaId, $fecha, $pdo);

            echo json_encode([
                'success' => true,
                'message' => "Archivo eliminado correctamente.",
                'pdf_concatenado' => $concatResult['pdf_concatenado'],
                'total_archivos' => $concatResult['total_archivos']
            ]);
            exit;
        }

        throw new Exception("Acción POST no válida");
    }

    // ─────────────────────────────────────────────
    //  GET Actions
    // ─────────────────────────────────────────────
    if ($action === 'listar') {
        $stmt = $pdo->query("
            SELECT id, fecha, pdf_concatenado, total_archivos, created_at 
            FROM factura_dias_pdf 
            ORDER BY fecha DESC
        ");
        $data = $stmt->fetchAll();
        echo json_encode(['success' => true, 'data' => $data]);
        exit;
    }

    if ($action === 'detalle') {
        $diaId = intval($_GET['dia_id'] ?? 0);
        if ($diaId <= 0) throw new Exception("ID de día inválido");

        $stmtDia = $pdo->prepare("SELECT * FROM factura_dias_pdf WHERE id = :id");
        $stmtDia->execute([':id' => $diaId]);
        $dia = $stmtDia->fetch();

        if (!$dia) {
            throw new Exception("Día no encontrado");
        }

        $stmtFiles = $pdo->prepare("
            SELECT id, nombre_original, ruta_archivo, tamano_bytes, orden, created_at 
            FROM factura_archivos_pdf 
            WHERE dia_id = :dia_id 
            ORDER BY orden ASC, id ASC
        ");
        $stmtFiles->execute([':dia_id' => $diaId]);
        $files = $stmtFiles->fetchAll();

        echo json_encode([
            'success' => true,
            'dia' => $dia,
            'archivos' => $files
        ]);
        exit;
    }

    throw new Exception("Acción GET no válida");

} catch (Exception $e) {
    if (isset($pdo) && $pdo->inTransaction()) {
        $pdo->rollBack();
    }
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
