<?php
session_start();
require_once(__DIR__ . '/../db/conexion.php');
header('Content-Type: application/json');

$response = [
    'success' => false,
    'vacantes_completas_pdv' => 0,
    'vacantes_administrativas' => 0,
    'vacantes_medio_tiempo_pdv' => 0,
    'vacantes_otros' => 0,
    'total_vacantes' => 0,
    'no_clasificadas' => []
];

try {
    // Obtener vacantes disponibles
    $sqlVacantes = "
        SELECT p.Codigo, p.NombrePuesto, p.ORGPDV, p.tipoPosic, t.PDV AS NombrePDV
        FROM Posiciones p
        LEFT JOIN Plantilla pl ON pl.PosicionCode = p.Codigo
        INNER JOIN Tiendas t ON t.ORGAnizacionSOC = p.ORGPDV
        WHERE pl.PosicionCode IS NULL
    ";
    $resultVacantes = $conn->query($sqlVacantes);
    if (!$resultVacantes) {
        throw new Exception("Error al consultar vacantes: " . $conn->error);
    }

    $vacantes = [];
    while ($row = $resultVacantes->fetch_assoc()) {
        $tipoPosic = strtoupper(trim($row['tipoPosic']));
        $modalidad = $tipoPosic === 'ÚNICO' ? 'TIEMPO COMPLETO' : 'MEDIO TIEMPO';
        $vacantes[] = [
            'codigo'    => $row['Codigo'],
            'puesto'    => $row['NombrePuesto'],
            'pdv'       => $row['NombrePDV'],
            'modalidad' => $modalidad,
            'tipoPosic' => $tipoPosic
        ];
    }

    // Obtener tiendas de Matriz
    $sqlSectores = "SELECT Tiendas, Sector FROM sectoresdPDVs ORDER BY Sector";
    $resultSectores = $conn->query($sqlSectores);
    $matrizTiendas = [];
    $subdistrTiendas = [];

    while ($row = $resultSectores->fetch_assoc()) {
        $tiendasRaw = array_map('trim', explode(',', $row['Tiendas']));
        if (stripos($row['Sector'], 'matriz') !== false) {
            $matrizTiendas = array_merge($matrizTiendas, $tiendasRaw);
        }
        if (stripos($row['Sector'], 'subdistr') !== false) {
            $subdistrTiendas = array_merge($subdistrTiendas, $tiendasRaw);
        }
    }

    $matrizTiendasUpper = array_map('strtoupper', $matrizTiendas);
    $subdistrTiendasUpper = array_map('strtoupper', $subdistrTiendas);

    // Inicializar contadores
    $puestosPDV = ['EJECUTIVO', 'GERENTE', 'SUBGERENTE'];
    $completas_pdv = 0;
    $medio_tiempo_pdv = 0;
    $administrativas = 0;
    $otros = 0;
    $no_clasificadas = [];

    foreach ($vacantes as $vacante) {
        $puesto = strtoupper(trim($vacante['puesto']));
        $pdv = strtoupper(trim($vacante['pdv']));
        $tipoPosic = strtoupper(trim($vacante['tipoPosic']));

        // ⛔ Omitir si pertenece a tienda agrupada en Subdistr
        foreach ($subdistrTiendasUpper as $subdistrPDV) {
            if (strpos($pdv, $subdistrPDV) !== false) {
                continue 2; // saltar esta vacante completamente
            }
        }

        // ✅ Si pertenece a Matriz
        foreach ($matrizTiendasUpper as $matrizPDV) {
            if (strpos($pdv, $matrizPDV) !== false) {
                $administrativas++;
                continue 2;
            }
        }

        // ✅ Clasificación por puesto y modalidad
        $esPDV = false;
        foreach ($puestosPDV as $puestoPDV) {
            if (strpos($puesto, $puestoPDV) !== false) {
                $esPDV = true;
                if ($tipoPosic === 'COMPUESTO') {
                    $medio_tiempo_pdv++;
                } elseif ($tipoPosic === 'ÚNICO') {
                    $completas_pdv++;
                }
                break;
            }
        }

        if (!$esPDV) {
            $otros++;
            $no_clasificadas[] = $vacante;
        }
    }

    $total_validas = $completas_pdv + $medio_tiempo_pdv + $administrativas + $otros;

    $response['success'] = true;
    $response['vacantes_completas_pdv'] = $completas_pdv;
    $response['vacantes_administrativas'] = $administrativas;
    $response['vacantes_medio_tiempo_pdv'] = $medio_tiempo_pdv;
    $response['vacantes_otros'] = $otros;
    $response['total_vacantes'] = $total_validas;
    $response['no_clasificadas'] = $no_clasificadas;

} catch (Exception $e) {
    $response['error'] = $e->getMessage();
}

echo json_encode($response);
