<?php
// duplicate_packing_list.php - Logik zum Duplizieren einer kompletten Packliste

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

require_once 'db_connect.php';
$current_user_id = $_SESSION['user_id'];
$original_list_id = isset($_GET['id']) ? intval($_GET['id']) : 0;

if ($original_list_id <= 0) {
    $_SESSION['message'] = '<div class="alert alert-danger" role="alert">Ungültige Packlisten-ID zum Duplizieren.</div>';
    header("Location: packing_lists.php");
    exit;
}

$conn->begin_transaction();

try {
    // 1. Originale Packliste abrufen, um den Namen zu bekommen und die Berechtigung zu prüfen
    $stmt_original = $conn->prepare("SELECT name, description FROM packing_lists WHERE id = ? AND user_id = ?");
    $stmt_original->bind_param("ii", $original_list_id, $current_user_id);
    $stmt_original->execute();
    $result_original = $stmt_original->get_result();
    if ($result_original->num_rows === 0) {
        throw new Exception("Originale Packliste nicht gefunden oder keine Berechtigung.");
    }
    $original_list = $result_original->fetch_assoc();
    $stmt_original->close();

    // 2. Neuen Namen für die Kopie finden (z.B. "Tour (Kopie 1)", "Tour (Kopie 2)", etc.)
    $base_name = $original_list['name'];
    $copy_name = '';
    $copy_number = 1;
    while (true) {
        $suffix = " (Kopie " . $copy_number . ")";
        $test_name = $base_name . $suffix;
        
        $stmt_check_name = $conn->prepare("SELECT id FROM packing_lists WHERE name = ? AND user_id = ?");
        $stmt_check_name->bind_param("si", $test_name, $current_user_id);
        $stmt_check_name->execute();
        $stmt_check_name->store_result();
        
        if ($stmt_check_name->num_rows === 0) {
            $copy_name = $test_name;
            $stmt_check_name->close();
            break;
        }
        $stmt_check_name->close();
        $copy_number++;
    }

    // 3. Neue Packliste in die `packing_lists` Tabelle einfügen
    $stmt_new_list = $conn->prepare("INSERT INTO packing_lists (user_id, name, description) VALUES (?, ?, ?)");
    $stmt_new_list->bind_param("iss", $current_user_id, $copy_name, $original_list['description']);
    if (!$stmt_new_list->execute()) throw new Exception("Fehler beim Erstellen des Listenkopfeintrags.");
    $new_list_id = $conn->insert_id;
    $stmt_new_list->close();

    // 4. Inhalt kopieren (Items, Träger, Hierarchien)
    // Nutzen der zentralen Hilfsfunktion, die auch beim Erstellen aus Templates verwendet wird.
    require_once 'packing_list_utils.php';
    copyPackingListContent($original_list_id, $new_list_id, $conn);
    
    $conn->commit();
    $_SESSION['message'] = '<div class="alert alert-success" role="alert">Packliste erfolgreich zu "'.$copy_name.'" dupliziert!</div>';

} catch (Exception $e) {
    $conn->rollback();
    $_SESSION['message'] = '<div class="alert alert-danger" role="alert">Fehler beim Duplizieren: ' . $e->getMessage() . '</div>';
    // NEU: Logge den tatsächlichen Fehler für den Admin
    error_log("Fehler beim Duplizieren der Packliste: " . $e->getMessage());
}

header("Location: packing_lists.php");
exit;
?>
