<?php
// ? Errores (quitar en produccion)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// ? CORS y Headers
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Content-Type: application/json; charset=utf-8");

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

// ? Conexion
require_once(__DIR__ . '/../../config.php');
 $mysqli->set_charset("utf8mb4");

// Verificación de conexión explícita
if ($mysqli->connect_error) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Error de conexión a la BD: ' . $mysqli->connect_error]);
    exit;
}

 $input = json_decode(file_get_contents('php://input'), true);

if (!$input) {
    http_response_code(400);
    echo json_encode(['success'=>false,'message'=>'JSON inválido o vacío.']);
    exit;
}

// --- VALIDACION DE PARAMETROS ---
 $slug_tienda = isset($input['slug_tienda']) ? trim($input['slug_tienda']) : '';
 $cajero = isset($input['cajero']) ? trim($input['cajero']) : '';
 $turno = isset($input['turno']) ? trim($input['turno']) : '';
 $monto_inicial = isset($input['monto_inicial']) ? floatval($input['monto_inicial']) : 0;

// --- VALIDACIÓN Y HOMOLOGACIÓN CON SINÓNIMOS ---
// Lista de valores que consideraremos válidos, incluyendo el sinónimo y el valor original.
 $turnos_validos = ['mañana', 'maÃ±ana', 'diurno', 'tarde', 'noche'];

if (!$slug_tienda || !$cajero || !$turno || !in_array($turno, $turnos_validos)) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'Faltan parámetros requeridos o el turno no es válido.']);
    exit;
}

// --- CORRECCIÓN CLAVE ---
// El ENUM en la base de datos es ('diurno','tarde','noche').
// Por lo tanto, debemos convertir todos los sinónimos a 'diurno' para que la inserción funcione.
if ($turno === 'mañana' || $turno === 'maÃ±ana' || $turno === 'diurno') {
    $turno = 'diurno'; // El valor canónico que se guardará en la BD
}

try {
    // --- VERIFICAR SI YA HAY UN TURNO ABIERTO ---
    $check_sql = "SELECT id FROM cierres_de_caja WHERE slug_tienda = ? AND cajero = ? AND estado = 'abierto'";
    $check_stmt = $mysqli->prepare($check_sql);
    
    if (!$check_stmt) {
        throw new Exception("Error preparando consulta de verificación: " . $mysqli->error);
    }
    
    $check_stmt->bind_param('ss', $slug_tienda, $cajero);
    $check_stmt->execute();
    $check_result = $check_stmt->get_result();
    
    if ($check_result->num_rows > 0) {
        http_response_code(409); // 409 Conflict
        echo json_encode(['success' => false, 'message' => 'Ya tienes un turno abierto.']);
        $check_stmt->close();
        exit;
    }
    $check_stmt->close();

    // --- INSERTAR NUEVA APERTURA ---
    $sql = "INSERT INTO cierres_de_caja (slug_tienda, cajero, turno, fecha_apertura, monto_inicial, estado) VALUES (?, ?, ?, NOW(), ?, 'abierto')";
    $stmt = $mysqli->prepare($sql);
    
    if (!$stmt) {
        throw new Exception("Error preparando consulta de inserción: " . $mysqli->error);
    }
    
    $stmt->bind_param('sssd', $slug_tienda, $cajero, $turno, $monto_inicial);
    
    if (!$stmt->execute()) {
        throw new Exception("Error al ejecutar inserción: " . $stmt->error);
    }
    
    $apertura_id = $mysqli->insert_id;
    $stmt->close();
    
    if ($apertura_id > 0) {
        echo json_encode([
            'success' => true, 
            'message' => 'Turno iniciado correctamente.',
            'apertura_id' => $apertura_id
        ]);
    } else {
        throw new Exception("No se pudo obtener el ID del nuevo turno.");
    }

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
} finally {
    if (isset($mysqli) && $mysqli) { $mysqli->close(); }
}
?>