<?php
// process_dispute.php (Raíz o carpeta user)
require_once __DIR__ . '/config/db.php';
if (session_status() === PHP_SESSION_NONE) { session_start(); }

// 1. Seguridad básica
if (!isset($_SESSION['user_id'])) { die("Inicia sesión."); }

$order_id = intval($_POST['order_id'] ?? 0);
$reason   = trim($_POST['reason'] ?? '');
$evidence = filter_var($_POST['evidence_url'] ?? '', FILTER_SANITIZE_URL);
$user_id  = $_SESSION['user_id'];

if (empty($reason)) {
    header("Location: dashboard.php?error=empty_reason");
    exit;
}

try {
    $pdo->beginTransaction();

    // 2. SEGURIDAD: Solo el COMPRADOR de esa orden puede abrir disputa
    // Y solo si la orden está en estado 'paid' o 'completed'
    $check = $pdo->prepare("SELECT id FROM orders WHERE id = ? AND buyer_id = ? AND status NOT IN ('cancelled', 'IN_DISPUTE')");
    $check->execute([$order_id, $user_id]);
    
    if (!$check->fetch()) {
        throw new Exception("No tienes permiso para disputar esta orden o ya está en disputa.");
    }

    // 3. Cambiar estado de la orden a 'IN_DISPUTE'
    $pdo->prepare("UPDATE orders SET status = 'IN_DISPUTE', dispute_created_at = NOW() WHERE id = ?")
        ->execute([$order_id]);

    // 4. Guardar el primer mensaje del chat (El alegato inicial)
    $pdo->prepare("INSERT INTO dispute_messages (order_id, sender_id, message, evidence_url) VALUES (?, ?, ?, ?)")
        ->execute([$order_id, $user_id, $reason, $evidence]);

    // 5. Notificar al sistema (Opcional: puedes enviar notificación al vendedor aquí)
    
    $pdo->commit();
    header("Location: my_orders.php?success=dispute_opened");
    exit;

} catch(Exception $e) {
    if ($pdo->inTransaction()) { $pdo->rollBack(); }
    header("Location: my_orders.php?error=" . urlencode($e->getMessage()));
    exit;
}