<?php
/**
 * API: Calcular Precio con Descuento
 * Calcula el precio final aplicando el descuento correspondiente
 */

header('Content-Type: application/json');
require_once '../../db_connection.php';

try {
    $input = json_decode(file_get_contents('php://input'), true);
    
    $precio_original = isset($input['precio_original']) ? floatval($input['precio_original']) : 0;
    $costo_producto = isset($input['costo_producto']) ? floatval($input['costo_producto']) : 0;
    $tipo_descuento = $input['tipo_descuento'] ?? 'ninguno';
    $codigo_empleado = $input['codigo_empleado'] ?? null;
    $total_venta = isset($input['total_venta']) ? floatval($input['total_venta']) : 0;
    
    // Validaciones básicas
    if ($precio_original <= 0) {
        throw new Exception('El precio debe ser mayor a 0');
    }
    
    if ($tipo_descuento === 'ninguno') {
        echo json_encode([
            'success' => true,
            'precio_original' => $precio_original,
            'porcentaje_descuento' => 0,
            'monto_descuento' => 0,
            'precio_final' => $precio_original,
            'descuento_aplicable' => false
        ]);
        exit;
    }
    
    // Obtener configuración del descuento
    $stmt = $pdo->prepare("
        SELECT porcentaje_descuento, monto_fijo, activo, condicion_minima, requiere_codigo
        FROM descuentos_especiales
        WHERE tipo_descuento = ?
    ");
    $stmt->execute([$tipo_descuento]);
    $config = $stmt->fetch();
    
    if (!$config) {
        throw new Exception('Tipo de descuento no encontrado');
    }
    
    if (!$config['activo']) {
        throw new Exception('Este tipo de descuento está desactivado');
    }
    
    // Validar código de empleado si es requerido
    if ($tipo_descuento === 'empleado') {
        if (!$codigo_empleado) {
            throw new Exception('Se requiere código de empleado');
        }
        
        // Validar contra tabla usuarios
        $stmt = $pdo->prepare("SELECT id, nombre FROM usuarios WHERE codigo_usuario = ?");
        $stmt->execute([$codigo_empleado]);
        $empleado = $stmt->fetch();
        
        if (!$empleado) {
            throw new Exception('Código de empleado inválido o inactivo');
        }
        
        // DESCUENTO SOBRE GANANCIA
        if ($costo_producto <= 0) {
            // Si no hay costo registrado, calcularemos el descuento asumiendo 
            // que la ganancia es el total del precio para no bloquear la funcionalidad.
            $ganancia = $precio_original;
        } else {
            $ganancia = $precio_original - $costo_producto;
        }
        $porcentaje_descuento = floatval($config['porcentaje_descuento']);
        $monto_descuento = ($ganancia * $porcentaje_descuento) / 100;
        $precio_final = $precio_original - $monto_descuento;
        
        echo json_encode([
            'success' => true,
            'precio_original' => round($precio_original, 2),
            'costo_producto' => round($costo_producto, 2),
            'ganancia' => round($ganancia, 2),
            'porcentaje_descuento' => $porcentaje_descuento,
            'monto_descuento' => round($monto_descuento, 2),
            'precio_final' => round($precio_final, 2),
            'descuento_aplicable' => true,
            'empleado_nombre' => $empleado['nombre']
        ]);
        exit;
    }
    
    // Verificar condición mínima (para ayuda social)
    $descuento_aplicable = true;
    if ($tipo_descuento === 'ayuda_social' && !is_null($config['condicion_minima'])) {
        // Para ayuda social, aplicamos a productos cuyo precio individual sea menor o igual a la condición mínima (ej. Q20 o menos)
        if ($precio_original > floatval($config['condicion_minima'])) {
            $descuento_aplicable = false;
        }
    }
    
    // Calcular descuento
    if ($tipo_descuento === 'ayuda_social' && $config['monto_fijo']) {
        // AYUDA SOCIAL: Monto fijo obsequiado
        $monto_descuento = $descuento_aplicable ? floatval($config['monto_fijo']) : 0;
        $precio_final = $precio_original - $monto_descuento;
        
        echo json_encode([
            'success' => true,
            'precio_original' => round($precio_original, 2),
            'porcentaje_descuento' => 0,
            'monto_descuento' => round($monto_descuento, 2),
            'monto_fijo' => round(floatval($config['monto_fijo']), 2),
            'precio_final' => round($precio_final, 2),
            'descuento_aplicable' => $descuento_aplicable,
            'total_venta' => round($total_venta, 2),
            'condicion_minima' => round(floatval($config['condicion_minima']), 2)
        ]);
    } else {
        // Otros descuentos (si los hay en el futuro)
        $porcentaje_descuento = $descuento_aplicable ? floatval($config['porcentaje_descuento']) : 0;
        $monto_descuento = ($precio_original * $porcentaje_descuento) / 100;
        $precio_final = $precio_original - $monto_descuento;
        
        echo json_encode([
            'success' => true,
            'precio_original' => round($precio_original, 2),
            'porcentaje_descuento' => $porcentaje_descuento,
            'monto_descuento' => round($monto_descuento, 2),
            'precio_final' => round($precio_final, 2),
            'descuento_aplicable' => $descuento_aplicable
        ]);
    }
    
    
} catch (Exception $e) {
    http_response_code(400);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage()
    ]);
}
