<?php
if (!defined('BASEPATH')) {
    http_response_code(403);
    die(json_encode(["success" => false, "message" => "Acceso directo no permitido"]));
}

switch ($tipo) {
    case 'getTurnoActivo':
        $caja = isset($datapost['caja']) ? mysqli_real_escape_string($conn, $datapost['caja']) : '';
        $sucursal = isset($datapost['sucursal']) ? mysqli_real_escape_string($conn, $datapost['sucursal']) : '';

        $sql = "SELECT t.*, u.nombre as usuario_nombre
                FROM turnos t
                LEFT JOIN usuarios u ON t.usuario_id = u.id
                WHERE t.estado = 'activo'";

        if (!empty($caja)) {
            $sql .= " AND t.caja = '$caja'";
        }
        if (!empty($sucursal)) {
            $sql .= " AND t.sucursal = '$sucursal'";
        }

        $sql .= " ORDER BY t.fecha_inicio DESC LIMIT 1";

        $result = mysqli_query($conn, $sql);

        if ($result && mysqli_num_rows($result) > 0) {
            $turno = mysqli_fetch_assoc($result);
            sendResponse(true, "Turno activo encontrado", [
                'id' => (int)$turno['id'],
                'usuario_id' => (int)$turno['usuario_id'],
                'usuario_nombre' => $turno['usuario_nombre'],
                'sucursal' => $turno['sucursal'],
                'caja' => $turno['caja'],
                'fondo_caja' => (float)$turno['fondo_caja'],
                'fecha_inicio' => $turno['fecha_inicio'],
                'estado' => $turno['estado']
            ]);
        } else {
            sendResponse(true, "Sin turno activo", null);
        }
        break;

    case 'iniciarTurno':
        $usuario_id = isset($datapost['usuario_id']) ? (int)$datapost['usuario_id'] : null;
        $sucursal = isset($datapost['sucursal']) ? mysqli_real_escape_string($conn, $datapost['sucursal']) : '';
        $caja = isset($datapost['caja']) ? mysqli_real_escape_string($conn, $datapost['caja']) : '';
        $fondo_caja = isset($datapost['fondo_caja']) ? (float)$datapost['fondo_caja'] : 0;
        $inventario = isset($datapost['inventario']) ? $datapost['inventario'] : [];

        if (empty($sucursal) || empty($caja)) {
            sendResponse(false, "Sucursal y caja son requeridos");
        }

        // Verificar que no haya turno activo
        $check = mysqli_query($conn, "SELECT id FROM turnos WHERE estado = 'activo' AND caja = '$caja' AND sucursal = '$sucursal'");
        if ($check && mysqli_num_rows($check) > 0) {
            sendResponse(false, "Ya hay un turno activo en esta caja");
        }

        $usuario_val = $usuario_id ? $usuario_id : 'NULL';

        mysqli_begin_transaction($conn);

        try {
            $sql = "INSERT INTO turnos (usuario_id, sucursal, caja, fondo_caja, fecha_inicio)
                    VALUES ($usuario_val, '$sucursal', '$caja', $fondo_caja, NOW())";

            if (!mysqli_query($conn, $sql)) {
                throw new Exception("Error al crear turno: " . mysqli_error($conn));
            }

            $turno_id = mysqli_insert_id($conn);

            // Guardar inventario inicial
            if (!empty($inventario)) {
                foreach ($inventario as $item) {
                    $prod_id = (int)$item['producto_id'];
                    $prod_nombre = mysqli_real_escape_string($conn, $item['nombre']);
                    $stock_sistema = (float)$item['stock_sistema'];
                    $stock_fisico = (float)$item['stock_fisico'];
                    $diferencia = $stock_fisico - $stock_sistema;
                    $unidad = mysqli_real_escape_string($conn, $item['unidad']);

                    $sql_inv = "INSERT INTO turno_inventario (turno_id, producto_id, producto_nombre, stock_sistema, stock_fisico, diferencia, unidad)
                                VALUES ($turno_id, $prod_id, '$prod_nombre', $stock_sistema, $stock_fisico, $diferencia, '$unidad')";

                    if (!mysqli_query($conn, $sql_inv)) {
                        throw new Exception("Error al guardar inventario: " . mysqli_error($conn));
                    }

                    // Actualizar stock del producto al fisico
                    $sql_upd = "UPDATE productos SET stock = $stock_fisico, updated_at = NOW() WHERE id = $prod_id";
                    mysqli_query($conn, $sql_upd);
                }
            }

            mysqli_commit($conn);

            sendResponse(true, "Turno iniciado correctamente", [
                'id' => $turno_id,
                'fecha_inicio' => date('Y-m-d H:i:s'),
                'fondo_caja' => $fondo_caja
            ]);

        } catch (Exception $e) {
            mysqli_rollback($conn);
            sendResponse(false, $e->getMessage());
        }
        break;

    case 'cerrarTurno':
        $turno_id = isset($datapost['turno_id']) ? (int)$datapost['turno_id'] : 0;
        $corte_id = isset($datapost['corte_id']) ? (int)$datapost['corte_id'] : null;

        if ($turno_id <= 0) {
            sendResponse(false, "ID de turno no valido");
        }

        $corte_val = $corte_id ? $corte_id : 'NULL';
        $sql = "UPDATE turnos SET estado = 'cerrado', fecha_fin = NOW(), corte_id = $corte_val, updated_at = NOW()
                WHERE id = $turno_id AND estado = 'activo'";

        if (mysqli_query($conn, $sql)) {
            if (mysqli_affected_rows($conn) > 0) {
                sendResponse(true, "Turno cerrado correctamente");
            } else {
                sendResponse(false, "Turno no encontrado o ya fue cerrado");
            }
        } else {
            sendResponse(false, "Error al cerrar turno: " . mysqli_error($conn));
        }
        break;

    case 'getProductosContarInicio':
        $sql = "SELECT id, nombre, stock, unidad FROM productos
                WHERE activo = 1 AND contar_al_inicio = 1
                ORDER BY nombre ASC";
        $result = mysqli_query($conn, $sql);

        if ($result) {
            $productos = [];
            while ($row = mysqli_fetch_assoc($result)) {
                $productos[] = [
                    'id' => (int)$row['id'],
                    'nombre' => $row['nombre'],
                    'stock' => (float)$row['stock'],
                    'unidad' => $row['unidad']
                ];
            }
            sendResponse(true, "Productos obtenidos", $productos);
        } else {
            sendResponse(false, "Error: " . mysqli_error($conn));
        }
        break;

    default:
        sendResponse(false, "Operacion no valida en Turnos");
        break;
}
