<?php
require_once __DIR__ . '/config.php';

$currentUser = requireAuth();
$db = getDB();
$action = $_GET['action'] ?? 'list';
$id = intval($_GET['id'] ?? 0);

header('Content-Type: application/json');

switch ($action) {

    case 'list':
        $stmt = $db->prepare("
            SELECT i.*, c.name AS customer_name, u.name AS created_by_name
            FROM itineraries i
            LEFT JOIN customers c ON i.customer_id = c.id
            LEFT JOIN users u ON i.created_by = u.id
            ORDER BY i.created_at DESC
        ");
        $stmt->execute();
        jsonResponse(['success' => true, 'data' => $stmt->fetchAll()]);
        break;

    case 'get':
        $stmt = $db->prepare("SELECT i.*, c.name AS customer_name FROM itineraries i LEFT JOIN customers c ON i.customer_id = c.id WHERE i.id = ?");
        $stmt->execute([$id]);
        $item = $stmt->fetch();
        if (!$item) jsonResponse(['success' => false, 'error' => 'Not found'], 404);
        if ($item['days_data']) $item['days_data'] = json_decode($item['days_data'], true);
        jsonResponse(['success' => true, 'data' => $item]);
        break;

    case 'create':
        $input = getInput();
        $daysData = json_encode($input['days_data'] ?? []);
        $stmt = $db->prepare("
            INSERT INTO itineraries (customer_id, lead_id, title, destination, start_date, end_date, num_days, days_data, status, created_by)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ");
        $stmt->execute([
            intval($input['customer_id'] ?? 0) ?: null,
            intval($input['lead_id'] ?? 0) ?: null,
            trim($input['title'] ?? ''),
            trim($input['destination'] ?? ''),
            $input['start_date'] ?: null,
            $input['end_date'] ?: null,
            intval($input['num_days'] ?? 1),
            $daysData,
            $input['status'] ?? 'draft',
            $currentUser['id']
        ]);
        $newId = $db->lastInsertId();
        logActivity($currentUser['id'], 'created', 'itinerary', $newId, "Itinerary: " . ($input['title'] ?? ''));
        jsonResponse(['success' => true, 'id' => $newId, 'message' => 'Itinerary created']);
        break;

    case 'update':
        $input = getInput();
        $daysData = json_encode($input['days_data'] ?? []);
        $stmt = $db->prepare("
            UPDATE itineraries SET customer_id=?, lead_id=?, title=?, destination=?, start_date=?, end_date=?, num_days=?, days_data=?, status=?
            WHERE id=?
        ");
        $stmt->execute([
            intval($input['customer_id'] ?? 0) ?: null,
            intval($input['lead_id'] ?? 0) ?: null,
            trim($input['title'] ?? ''),
            trim($input['destination'] ?? ''),
            $input['start_date'] ?: null,
            $input['end_date'] ?: null,
            intval($input['num_days'] ?? 1),
            $daysData,
            $input['status'] ?? 'draft',
            $id
        ]);
        logActivity($currentUser['id'], 'updated', 'itinerary', $id, "Updated itinerary ID: $id");
        jsonResponse(['success' => true, 'message' => 'Itinerary updated']);
        break;

    case 'delete':
        $db->prepare("DELETE FROM itineraries WHERE id=?")->execute([$id]);
        jsonResponse(['success' => true, 'message' => 'Itinerary deleted']);
        break;

    default:
        jsonResponse(['success' => false, 'error' => 'Unknown action'], 400);
}
