<?php
/**
 * API: GestionPro - Obtener días, meses y detalles por día
 */
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

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

require_once __DIR__ . '/config/db.php';

$action = $_GET['action'] ?? 'por_mes';

try {
    $pdo = getConnection();

    // ─────────────────────────────────────────────
    //  GET: Obtener meses disponibles
    // ─────────────────────────────────────────────
    if ($action === 'meses_disponibles') {
        $stmt = $pdo->query("
            SELECT DISTINCT YEAR(fecha_importacion) as anio, MONTH(fecha_importacion) as mes FROM fel_importaciones
            UNION
            SELECT DISTINCT YEAR(fecha) as anio, MONTH(fecha) as mes FROM factura_dias_pdf
            ORDER BY anio DESC, mes DESC
        ");
        $data = $stmt->fetchAll();
        echo json_encode(['success' => true, 'data' => $data]);
        exit;
    }

    // ─────────────────────────────────────────────
    //  GET: Listar días con datos por mes
    // ─────────────────────────────────────────────
    if ($action === 'por_mes') {
        $mes = intval($_GET['mes'] ?? date('m'));
        $anio = intval($_GET['anio'] ?? date('Y'));

        if ($mes < 1 || $mes > 12 || $anio < 2000) {
            throw new Exception("Parámetros de mes o año inválidos");
        }

        $startDate = sprintf("%04d-%02d-01 00:00:00", $anio, $mes);
        $endDate = date('Y-m-d 23:59:59', strtotime(sprintf("%04d-%02d-01", $anio, $mes) . ' +1 month -1 day'));

        $startOnlyDate = sprintf("%04d-%02d-01", $anio, $mes);
        $endOnlyDate = date('Y-m-d', strtotime($startOnlyDate . ' +1 month -1 day'));

        // 1. Obtener datos XML
        $stmtXml = $pdo->prepare("
            SELECT DATE(fecha_importacion) as fecha, 
                   COUNT(id) as total_hojas_xml,
                   COALESCE(SUM(total_facturas), 0) as total_facturas_xml, 
                   COALESCE(SUM(total_productos), 0) as total_productos, 
                   COALESCE(SUM(total_invertido), 0) as total_invertido
            FROM fel_importaciones
            WHERE fecha_importacion >= :start AND fecha_importacion <= :end
            GROUP BY DATE(fecha_importacion)
        ");
        $stmtXml->execute([':start' => $startDate, ':end' => $endDate]);
        $xmlData = $stmtXml->fetchAll();

        // 2. Obtener datos PDF
        $stmtPdf = $pdo->prepare("
            SELECT fecha, total_archivos as total_facturas_pdf, pdf_concatenado, supervisado
            FROM factura_dias_pdf
            WHERE fecha >= :start AND fecha <= :end
        ");
        $stmtPdf->execute([':start' => $startOnlyDate, ':end' => $endOnlyDate]);
        $pdfData = $stmtPdf->fetchAll();

        // 3. Unificar datos en un array asociativo por fecha
        $dias = [];

        foreach ($xmlData as $x) {
            $fecha = $x['fecha'];
            $dias[$fecha] = [
                'fecha' => $fecha,
                'total_hojas' => intval($x['total_hojas_xml']),
                'total_facturas_xml' => intval($x['total_facturas_xml']),
                'total_productos' => intval($x['total_productos']),
                'total_invertido' => floatval($x['total_invertido']),
                'total_facturas_pdf' => 0,
                'pdf_concatenado' => null,
                'supervisado' => 0
            ];
        }

        foreach ($pdfData as $p) {
            $fecha = $p['fecha'];
            if (!isset($dias[$fecha])) {
                $dias[$fecha] = [
                    'fecha' => $fecha,
                    'total_hojas' => 0,
                    'total_facturas_xml' => 0,
                    'total_productos' => 0,
                    'total_invertido' => 0.00,
                    'supervisado' => 0
                ];
            }
            $dias[$fecha]['total_facturas_pdf'] = intval($p['total_facturas_pdf']);
            // El path del PDF apunta al directorio sincnuevo/uploads/
            $dias[$fecha]['pdf_concatenado'] = $p['pdf_concatenado'] ? '../sincnuevo/' . $p['pdf_concatenado'] : null;
            $dias[$fecha]['supervisado'] = intval($p['supervisado']);
        }

        // Ordenar por fecha descendente
        krsort($dias);

        echo json_encode(['success' => true, 'data' => array_values($dias)]);
        exit;
    }

    // ─────────────────────────────────────────────
    //  GET: Obtener detalles de un día específico
    // ─────────────────────────────────────────────
    if ($action === 'detalle') {
        $fecha = $_GET['fecha'] ?? '';
        if (empty($fecha) || !preg_match('/^\d{4}-\d{2}-\d{2}$/', $fecha)) {
            throw new Exception("Fecha inválida o requerida");
        }

        $startDate = $fecha . " 00:00:00";
        $endDate = $fecha . " 23:59:59";

        $stmt = $pdo->prepare("
            SELECT fd.*, fi.fecha_importacion, lc.nombre as lugar_nombre,
                   m.producto_id, p.CodigoInterno, p.NombreComercial as maestro_nombre, p.laboratorio,
                   COALESCE(
                       (SELECT plc.costo_compra FROM producto_lugares_compra plc WHERE plc.producto_id = p.id AND plc.lugar_compra_id = fd.lugar_compra_id AND plc.fecha_ultima_compra = DATE(fi.fecha_importacion) LIMIT 1),
                       (SELECT plc.costo_compra FROM producto_lugares_compra plc WHERE plc.producto_id = p.id AND plc.lugar_compra_id = 1 AND plc.fecha_ultima_compra = DATE(fi.fecha_importacion) LIMIT 1)
                   ) as CostoGuardado,
                   COALESCE(pp_blister.factor_conversion, 1) as FactorBlister,
                   COALESCE(pp_caja.factor_conversion, 1) as FactorCaja, 
                   COALESCE(pp_unidad.precio_venta, 0) as PrecioVentaUnidad,
                   COALESCE(pp_blister.precio_venta, 0) as PrecioVentaBlister,
                   COALESCE(pp_caja.precio_venta, 0) as PrecioVentaMayor,
                   0 as PrecioVentaMixto
            FROM fel_importacion_detalle fd
            JOIN fel_importaciones fi ON fd.importacion_id = fi.id
            LEFT JOIN lugarcompra lc ON fd.lugar_compra_id = lc.id
            LEFT JOIN fel_producto_mapping m ON fd.descripcion = m.descripcion_factura
            LEFT JOIN productos p ON m.producto_id = p.id
            LEFT JOIN producto_presentaciones pp_unidad ON p.id = pp_unidad.producto_id AND pp_unidad.presentacion_id = 1 AND pp_unidad.activo = 1
            LEFT JOIN producto_presentaciones pp_blister ON p.id = pp_blister.producto_id AND pp_blister.presentacion_id = 2 AND pp_blister.activo = 1
            LEFT JOIN producto_presentaciones pp_caja ON p.id = pp_caja.producto_id AND pp_caja.presentacion_id = 3 AND pp_caja.activo = 1
            WHERE fi.fecha_importacion >= :start AND fi.fecha_importacion <= :end
            ORDER BY fd.proveedor_nombre ASC, fd.id ASC
        ");
        $stmt->execute([':start' => $startDate, ':end' => $endDate]);
        $data = $stmt->fetchAll();

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

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

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