<?php
session_start();
require_once 'db/config.php';
require_once 'mail/MailService.php';

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

// --- Helper function to fetch webinar details ---
function get_webinar_details($id) {
    if (empty($id)) return null;
    try {
        $stmt = db()->prepare("SELECT id, title, description, scheduled_at, presenter FROM webinars WHERE id = ?");
        $stmt->execute([$id]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        error_log("Database error fetching webinar ID $id: " . $e->getMessage());
        return null;
    }
}

// --- Only allow POST requests ---
if ($_SERVER["REQUEST_METHOD"] !== "POST") {
    echo json_encode(['success' => false, 'error' => 'Invalid request method.']);
    exit;
}

$webinar_id = filter_input(INPUT_POST, 'webinar_id', FILTER_VALIDATE_INT) ?: 1;
$webinar = get_webinar_details($webinar_id);

if (!$webinar) {
    http_response_code(404);
    echo json_encode(['success' => false, 'error' => 'Webinar not found.']);
    exit;
}

// --- DATA CAPTURE ---
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$first_name = filter_input(INPUT_POST, 'first_name', FILTER_SANITIZE_STRING);
$last_name = filter_input(INPUT_POST, 'last_name', FILTER_SANITIZE_STRING);
$company = filter_input(INPUT_POST, 'company', FILTER_SANITIZE_STRING);
$how_did_you_hear = filter_input(INPUT_POST, 'how_did_you_hear', FILTER_SANITIZE_STRING);
$timezone = filter_input(INPUT_POST, 'timezone', FILTER_SANITIZE_STRING);

// --- VALIDATION ---
if (!$first_name || !$last_name || !$email) {
    echo json_encode(['success' => false, 'error' => 'Please fill out all required fields.']);
    exit;
}

try {
    // --- CHECK IF ALREADY REGISTERED ---
    $stmt = db()->prepare("SELECT id FROM attendees WHERE webinar_id = ? AND email = ?");
    $stmt->execute([$webinar_id, $email]);
    if ($stmt->fetch()) {
        echo json_encode(['success' => false, 'error' => 'You are already registered for this webinar.']);
        exit;
    }

    // --- REGISTER USER ---
    // Generate a password hash from the email as we don't have a password field
    $password_hash = password_hash($email . time(), PASSWORD_DEFAULT);
    $sql = "INSERT INTO attendees (webinar_id, first_name, last_name, email, company, how_did_you_hear, password, timezone) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
    $stmt = db()->prepare($sql);
    $stmt->execute([$webinar_id, $first_name, $last_name, $email, $company, $how_did_you_hear, $password_hash, $timezone]);
    
    // --- SEND CONFIRMATION EMAIL ---
    $webinar_date_obj = new DateTime($webinar['scheduled_at']);
    $subject = "Confirmation: You're Registered for " . $webinar['title'];
    $body_html = "<h1>You're in!</h1><p>Thanks for registering for our webinar: <strong>{$webinar['title']}</strong>.</p><p>It will take place on <strong>" . $webinar_date_obj->format('l, F j, Y \a\t g:i A T') . "</strong>.</p><p>You can now log in to your dashboard to see the details.</p>";
    MailService::sendMail($email, $subject, $body_html);

    // --- PREPARE SUCCESS RESPONSE ---
    $webinar_date = new DateTime($webinar['scheduled_at'], new DateTimeZone('UTC'));
    $start_time_utc = $webinar_date->format('Ymd	H	is	Z');
    $webinar_date->add(new DateInterval('PT1H')); // Assume 1 hour duration
    $end_time_utc = $webinar_date->format('Ymd	H	is	Z');

    $google_link = 'https://www.google.com/calendar/render?action=TEMPLATE&text=' . urlencode($webinar['title']) . '&dates=' . $start_time_utc . '/' . $end_time_utc . '&details=' . urlencode($webinar['description']) . '&ctz=UTC';
    
    $ics_content = implode("\n", [
        'BEGIN:VCALENDAR', 'VERSION:2.0', 'BEGIN:VEVENT',
        'URL:' . 'http://' . $_SERVER['HTTP_HOST'],
        'DTSTART:' . $start_time_utc, 'DTEND:' . $end_time_utc,
        'SUMMARY:' . $webinar['title'], 'DESCRIPTION:' . $webinar['description'],
        'END:VEVENT', 'END:VCALENDAR'
    ]);
    $outlook_link = 'data:text/calendar;charset=utf-8,' . rawurlencode($ics_content);

    echo json_encode([
        'success' => true,
        'webinar_title' => $webinar['title'],
        'google_link' => $google_link,
        'outlook_link' => $outlook_link
    ]);

} catch (Exception $e) {
    error_log("Registration error: " . $e->getMessage());
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => 'An unexpected server error occurred. Please try again.']);
}
