<?php
/**
 * prosesReschedule.php - Proses Pengajuan Perubahan Jadwal
 * HANYA TANGGAL & ALASAN YANG BISA DIUBAH - DESTINASI DIHAPUS
 */

// Pastikan user login sebagai wisatawan
if (!isset($_SESSION['user_id']) || $_SESSION['user_role'] != 'wisatawan') {
    header("Location: ?page=login");
    exit;
}

$userId = $_SESSION['user_id'];
$pesananId = $_POST['pesanan_id'] ?? 0;
$tanggalBaru = $_POST['tanggal_baru'] ?? '';
$alasan = trim($_POST['alasan'] ?? '');

// Validasi input - HANYA TANGGAL DAN ALASAN
$errors = [];

if (empty($pesananId)) {
    $errors[] = 'ID pesanan tidak valid.';
}

if (empty($tanggalBaru)) {
    $errors[] = 'Tanggal keberangkatan baru wajib dipilih.';
} else {
    // Validasi tanggal minimal H+2 dan maksimal 30 hari
    $now = new DateTime();
    $minDate = clone $now;
    $minDate->modify('+2 days');
    $maxDate = clone $now;
    $maxDate->modify('+30 days');
    
    $tanggalObj = DateTime::createFromFormat('Y-m-d', $tanggalBaru);
    if (!$tanggalObj) {
        $errors[] = 'Format tanggal tidak valid.';
    } elseif ($tanggalObj < $minDate) {
        $errors[] = 'Tanggal minimal H+2 dari hari ini.';
    } elseif ($tanggalObj > $maxDate) {
        $errors[] = 'Tanggal maksimal 30 hari ke depan.';
    }
}

// Validasi alasan
if (empty($alasan)) {
    $errors[] = 'Alasan perubahan jadwal wajib diisi.';
} elseif (strlen($alasan) < 10) {
    $errors[] = 'Alasan minimal 10 karakter.';
}

// Jika ada error, redirect kembali
if (!empty($errors)) {
    $_SESSION['flash_error'] = implode('<br>', $errors);
    header("Location: ?page=wisatawan&action=reschedule&id=" . $pesananId);
    exit;
}

try {
    // Koneksi database
    global $pdo;
    $db = $pdo;
    
    // Cek apakah pesanan milik user ini
    $stmt = $db->prepare("SELECT id, reschedule_status FROM pesanan WHERE id = ? AND user_id = ?");
    $stmt->execute([$pesananId, $userId]);
    $pesanan = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$pesanan) {
        $_SESSION['flash_error'] = 'Pesanan tidak ditemukan.';
        header("Location: ?page=wisatawan&action=riwayat");
        exit;
    }
    
    // Cek apakah sudah ada pengajuan reschedule sebelumnya
    if ($pesanan['reschedule_status'] == 'menunggu') {
        $_SESSION['flash_error'] = 'Pengajuan perubahan jadwal sedang diproses. Mohon tunggu.';
        header("Location: ?page=wisatawan&action=status&id=" . $pesananId);
        exit;
    }
    
    if ($pesanan['reschedule_status'] == 'disetujui') {
        $_SESSION['flash_error'] = 'Perubahan jadwal sudah disetujui.';
        header("Location: ?page=wisatawan&action=status&id=" . $pesananId);
        exit;
    }
    
    // Update reschedule - HANYA TANGGAL DAN ALASAN (destinasi tidak diubah)
    $stmt = $db->prepare("
        UPDATE pesanan 
        SET 
            reschedule_tanggal_baru = ?,
            reschedule_alasan = ?,
            reschedule_status = 'menunggu',
            reschedule_diajukan_pada = NOW()
        WHERE id = ? AND user_id = ?
    ");
    $stmt->execute([$tanggalBaru, $alasan, $pesananId, $userId]);
    
    if ($stmt->rowCount() > 0) {
        $_SESSION['flash_success'] = 'Pengajuan perubahan jadwal berhasil dikirim. Menunggu persetujuan supir kapal.';
    } else {
        $_SESSION['flash_error'] = 'Gagal mengajukan perubahan jadwal. Silakan coba lagi.';
    }
    
    header("Location: ?page=wisatawan&action=status&id=" . $pesananId);
    exit;
    
} catch (Exception $e) {
    $_SESSION['flash_error'] = 'Terjadi kesalahan: ' . $e->getMessage();
    header("Location: ?page=wisatawan&action=reschedule&id=" . $pesananId);
    exit;
}
?>