<?php

if (empty($_SESSION['user_id'])) {
    
header('Location: index.php?page=home');
    exit;
}

// admin status
$isAdmin = isset($_SESSION['is_admin']) && $_SESSION['is_admin'] == 1;

$msg '';
$msgType 'success';

// create plan
if ($isAdmin && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'create_plan') {
    
$fromDate = isset($_POST['from_date']) ? $_POST['from_date'] : '';
    
$weeks    = isset($_POST['weeks']) ? intval($_POST['weeks']) : 0;

    if (!empty(
$fromDate) && $weeks 0) {
        
// Insert new plan into the database
        
$query "INSERT INTO CINE_Plan (fromDate, weeks) VALUES (?, ?)";
        
$stmt  $dbc->prepare($query);
        
$stmt->bind_param('si'$fromDate$weeks);

        if (
$stmt->execute()) {
            
$msg     'Plan created successfully!';
            
$msgType 'success';
        } else {
            
$msg     'Error creating plan: ' $stmt->error;
            
$msgType 'error';
        }
        
$stmt->close();
    } else {
        
$msg     'Invalid plan data. Please check your inputs.';
        
$msgType 'error';
    }
}

$currentDate       time(); // get current time
$lockPeriodSeconds 24 60 60// 1 week in seconds

// delete plan (with updated lock logic)
if ($isAdmin && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'delete_plan') {
    
$planId = isset($_POST['plan_id']) ? intval($_POST['plan_id']) : 0;

    if (
$planId 0) {
        
// First check if the plan is within the lock period
        
$planQuery "SELECT fromDate FROM CINE_Plan WHERE pk_Plan = ?";
        
$checkStmt $dbc->prepare($planQuery);
        
$checkStmt->bind_param('i'$planId);
        
$checkStmt->execute();
        
$checkResult $checkStmt->get_result();

        if (
$row $checkResult->fetch_assoc()) {
            
$planStartTimestamp strtotime($row['fromDate']);
            
$lockDate           $planStartTimestamp $lockPeriodSeconds;

            
// only lock modifications during the one-week before the start date
            
if ($currentDate >= $lockDate && $currentDate $planStartTimestamp) {
                
$msg     'Cannot delete plan: Plans cannot be modified within 1 week of their start date.';
                
$msgType 'error';
                
$checkStmt->close();
            } else {
                
$checkStmt->close();

                
// Delete the plan
                
$query "DELETE FROM CINE_Plan WHERE pk_Plan = ?";
                
$stmt  $dbc->prepare($query);
                
$stmt->bind_param('i'$planId);

                if (
$stmt->execute()) {
                    
$msg     'Plan deleted successfully!';
                    
$msgType 'success';
                } else {
                    
$msg     'Error deleting plan: ' $stmt->error;
                    
$msgType 'error';
                }
                
$stmt->close();
            }
        } else {
            
$msg     'Plan not found.';
            
$msgType 'error';
            
$checkStmt->close();
        }
    }
}

// toggle active (with updated lock logic)
if ($isAdmin && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'toggle_active') {
    
$planId    = isset($_POST['plan_id']) ? intval($_POST['plan_id']) : 0;
    
$isActive  = isset($_POST['is_active']) ? (int)$_POST['is_active'] : 0;
    
$hasPassed = isset($_POST['has_passed']) ? (int)$_POST['has_passed'] : 0;

    if (
$planId 0) {
        
// First check if the plan is within the lock period
        
$planQuery "SELECT fromDate FROM CINE_Plan WHERE pk_Plan = ?";
        
$checkStmt $dbc->prepare($planQuery);
        
$checkStmt->bind_param('i'$planId);
        
$checkStmt->execute();
        
$checkResult $checkStmt->get_result();

        if (
$row $checkResult->fetch_assoc()) {
            
$planStartTimestamp strtotime($row['fromDate']);
            
$lockDate           $planStartTimestamp $lockPeriodSeconds;

            
// only lock modifications during the one-week before the start date
            
if ($currentDate >= $lockDate && $currentDate $planStartTimestamp) {
                
$msg     'Cannot modify plan: Plans cannot be modified within 1 week of their start date.';
                
$msgType 'error';
                
$checkStmt->close();
            } else {
                
$checkStmt->close();

                
// Toggle the active status
                
$query "UPDATE CINE_Plan SET isActive = ? WHERE pk_Plan = ?";
                
$stmt  $dbc->prepare($query);
                
$stmt->bind_param('ii'$isActive$planId);

                if (
$stmt->execute()) {
                    if (
$hasPassed) {
                        
$msg $isActive
                             
'Passed plan made visible again.'
                             
'Passed plan hidden.';
                    } else {
                        
$msg $isActive
                             
'Plan activated successfully!'
                             
'Plan deactivated successfully!';
                    }
                    
$msgType 'success';
                } else {
                    
$msg     'Error updating plan status: ' $stmt->error;
                    
$msgType 'error';
                }
                
$stmt->close();
            }
        } else {
            
$msg     'Plan not found.';
            
$msgType 'error';
            
$checkStmt->close();
        }
    }
}

// Update the plans query to include isActive field
$plansQuery   "SELECT pk_Plan, fromDate, weeks, isActive FROM CINE_Plan ORDER BY fromDate DESC";
$plansResult  $dbc->query($plansQuery);
$plans        = [];

while (
$row $plansResult->fetch_assoc()) {
    
// Calculate end date based on start date and weeks
    
$startTimestamp strtotime($row['fromDate']);
    
$endTimestamp   strtotime('+' $row['weeks'] . ' weeks -1 day'$startTimestamp);

    
// Format dates for display
    
$formattedStartDate date('M j, Y'$startTimestamp);
    
$formattedEndDate   date('M j, Y'$endTimestamp);

    
// Add to plans array
    
$plans[] = [
        
'id'                 => $row['pk_Plan'],
        
'formattedStartDate'=> $formattedStartDate,
        
'formattedEndDate'  => $formattedEndDate,
        
'weeks'             => $row['weeks'],
        
'isActive'          => isset($row['isActive']) ? (bool)$row['isActive'] : true
    
];
}

// Process plans to check if they've passed
foreach ($plans as $key => $plan) {
    
$startDateTimestamp strtotime($plan['formattedStartDate']);
    
$endDateTimestamp   strtotime($plan['formattedEndDate'] . ' 23:59:59');
    
$hasPassed          $endDateTimestamp $currentDate;
    
$lockDate           $startDateTimestamp $lockPeriodSeconds;
    
$isLocked           $currentDate >= $lockDate && $currentDate $startDateTimestamp;

    
$plans[$key]['hasPassed'] = $hasPassed;
    
$plans[$key]['isPassed']  = $hasPassed;
    
$plans[$key]['isLocked']  = $isLocked;
}

$totalPlans count($plans);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Calendar Plans - CinĂ© Le Paris</title>
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" />
    <link rel="stylesheet" href="assets/css/plans.css">
</head>
<body>
    <div class="plans-container">
        <!-- Header -->
        <div class="plans-header">
            <div class="plans-title-section">
                <h1 class="plans-title">Calendar Plans</h1>
                <p class="plans-subtitle">Planning periods for CinĂ© Le Paris</p>
            </div>
            <?php if ($isAdmin): ?>
            <div class="plans-actions">
                <a href="index.php?page=calendar" class="plans-btn plans-btn-secondary">
                    <span class="material-symbols-outlined">calendar_month</span> Calendar
                </a>
                <button class="plans-btn plans-btn-primary" id="createPlanBtn">
                    <span class="material-symbols-outlined">add</span> New Plan
                </button>
            </div>
            <?php endif; ?>
        </div>
        
        <!-- Success/Error Message (if any) -->
        <?php if ($msg): ?>
            <div class="plans-alert plans-alert-<?php echo $msgType?>">
                <div class="plans-alert-icon">
                    <span class="material-symbols-outlined">
                        <?php echo $msgType === 'success' 'check_circle' 'error'?>
                    </span>
                </div>
                <div class="plans-alert-content">
                    <?php echo htmlspecialchars($msg); ?>
                </div>
            </div>
        <?php endif; ?>
        
        <!-- Plans Table -->
        <?php if (count($plans) > 0): ?>
            <div class="plans-card">
                <div class="plans-card-header">
                    <h2 class="plans-card-title">All Plans</h2>
                    <div class="plans-card-actions">
                        <label class="plans-toggle-label">
                            <input type="checkbox" id="showHiddenPlans" class="plans-toggle-checkbox">
                            <span class="plans-toggle-text">Show hidden plans</span>
                        </label>
                        <span class="plans-card-count"><?php echo $totalPlans?> plans</span>
                    </div>
                </div>
                <div class="plans-table-container">
                    <table class="plans-table">
                        <thead>
                            <tr>
                                <th>ID</th>
                                <th>Start Date</th>
                                <th>End Date</th>
                                <th>Weeks</th>
                                <th>Status</th>
                                <th>Period</th>
                                <?php if ($isAdmin): ?>
                                <th>Actions</th>
                                <?php endif; ?>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($plans as $plan): ?>
                                <tr class="plan-row clickable-row <?php echo $plan['isActive'] ? 'active-row' ''?> <?php echo $plan['hasPassed'] ? 'passed-row' ''?> <?php echo $plan['isLocked'] ? 'locked-row' ''?>" data-plan-id="<?php echo $plan['id']; ?>">
                                    <td><?php echo $plan['id']; ?></td>
                                    <td><?php echo $plan['formattedStartDate']; ?></td>
                                    <td><?php echo $plan['formattedEndDate']; ?></td>
                                    <td><?php echo $plan['weeks']; ?> weeks</td>
                                    <td>
                                        <?php if ($plan['isActive']): ?>
                                            <span class="plans-badge plans-badge-active">
                                                <span class="material-symbols-outlined">check_circle</span> Active
                                            </span>
                                        <?php else: ?>
                                            <span class="plans-badge plans-badge-inactive">
                                                <span class="material-symbols-outlined">cancel</span> Inactive
                                            </span>
                                        <?php endif; ?>
                                    </td>
                                    <td>
                                        <?php if ($plan['hasPassed']): ?>
                                            <span class="plans-badge plans-badge-passed">
                                                <span class="material-symbols-outlined">history</span> Passed
                                            </span>
                                        <?php elseif ($plan['isLocked']): ?>
                                            <span class="plans-badge plans-badge-locked">
                                                <span class="material-symbols-outlined">lock</span> Locked
                                            </span>
                                        <?php else: ?>
                                            <span class="plans-badge plans-badge-current">
                                                <span class="material-symbols-outlined">event_available</span> Current
                                            </span>
                                        <?php endif; ?>
                                    </td>
                                    <td class="plans-actions-cell">
                                        <?php if ($isAdmin): ?>
                                            <?php if (!$plan['isLocked']): ?>
                                                <form method="post" action="" class="plans-action-form">
                                                    <input type="hidden" name="action" value="toggle_active">
                                                    <input type="hidden" name="plan_id" value="<?php echo $plan['id']; ?>">
                                                    <input type="hidden" name="is_active" value="<?php echo $plan['isActive'] ? '0' '1'?>">
                                                    <input type="hidden" name="has_passed" value="<?php echo $plan['hasPassed'] ? '1' '0'?>">
                                                    <button type="submit" class="plans-btn-icon <?php echo $plan['isActive'] ? 'plans-btn-deactivate' 'plans-btn-activate'?>
                                                            title="<?php echo $plan['isActive'] ? ($plan['hasPassed'] ? 'Hide Passed Plan' 'Deactivate Plan') : ($plan['hasPassed'] ? 'Show Passed Plan' 'Activate Plan'); ?>">
                                                        <span class="material-symbols-outlined">
                                                            <?php echo $plan['isActive'] ? 'toggle_on' 'toggle_off'?>
                                                        </span>
                                                    </button>
                                                </form>
                                                <form method="post" action="" class="plans-action-form" onsubmit="return confirm('Are you sure you want to delete this plan?');">
                                                    <input type="hidden" name="action" value="delete_plan">
                                                    <input type="hidden" name="plan_id" value="<?php echo $plan['id']; ?>">
                                                    <button type="submit" class="plans-btn-icon plans-btn-delete" title="Delete Plan">
                                                        <span class="material-symbols-outlined">delete</span>
                                                    </button>
                                                </form>
                                            <?php else: ?>
                                                <span class="plans-btn-icon plans-btn-disabled" title="Cannot modify: Plan is locked (within 1 week of start date)">
                                                    <span class="material-symbols-outlined">lock</span>
                                                </span>
                                            <?php endif; ?>
                                        <?php endif; ?>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        </tbody>
                    </table>
                </div>
            </div>
        <?php else: ?>
            <div class="plans-empty">
                <div class="plans-empty-icon">
                    <span class="material-symbols-outlined">event_busy</span>
                </div>
                <p class="plans-empty-text">No calendar plans have been created yet.</p>
                <?php if ($isAdmin): ?>
                <button class="plans-btn plans-btn-primary" id="createEmptyPlanBtn">
                    <span class="material-symbols-outlined">add</span> Create New Plan
                </button>
                <?php endif; ?>
            </div>
        <?php endif; ?>
        
        <!-- Back to Dashboard Button (visible to all users) -->
        <div class="plans-footer">
            <a href="index.php?page=dashboard" class="plans-btn plans-btn-secondary">
                <span class="material-symbols-outlined">dashboard</span> Back to Dashboard
            </a>
        </div>
    </div>
    
    <?php if ($isAdmin): ?>
    <!-- Create Plan Modal (admin only) -->
    <div class="plans-modal-backdrop" id="createPlanBackdrop"></div>
    <div class="plans-modal" id="createPlanModal">
        <div class="plans-modal-header">
            <h3 class="plans-modal-title">Create New Plan</h3>
            <button class="plans-modal-close" id="closeCreatePlanModal">
                <span class="material-symbols-outlined">close</span>
            </button>
        </div>
        <div class="plans-modal-body">
            <form method="post" action="" id="createPlanForm" class="plans-form">
                <input type="hidden" name="action" value="create_plan">
                
                <div class="plans-form-group">
                    <label class="plans-form-label" for="from_date">Start Date</label>
                    <input type="date" id="from_date" name="from_date" class="plans-form-control" required>
                </div>
                
                <div class="plans-form-group">
                    <label class="plans-form-label" for="weeks">Number of Weeks</label>
                    <input type="number" id="weeks" name="weeks" class="plans-form-control" min="1" max="52" value="4" required>
                </div>
                
                <div class="plans-form-group">
                    <label class="plans-form-label" for="end_date_preview">End Date (Preview)</label>
                    <input type="text" id="end_date_preview" class="plans-form-control" readonly>
                </div>
            </form>
        </div>
        <div class="plans-modal-footer">
            <button class="plans-btn plans-btn-secondary" id="cancelCreatePlanBtn">Cancel</button>
            <button class="plans-btn plans-btn-primary" id="submitCreatePlanBtn">Create Plan</button>
        </div>
    </div>
    <?php endif; ?>
    
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            <?php if ($isAdmin): ?>
            // Elements for Create Plan Modal
            const createPlanModal = document.getElementById('createPlanModal');
            const createPlanBackdrop = document.getElementById('createPlanBackdrop');
            const closeCreatePlanModal = document.getElementById('closeCreatePlanModal');
            const cancelCreatePlanBtn = document.getElementById('cancelCreatePlanBtn');
            const createPlanBtn = document.getElementById('createPlanBtn');
            const createEmptyPlanBtn = document.getElementById('createEmptyPlanBtn');
            const submitCreatePlanBtn = document.getElementById('submitCreatePlanBtn');
            const fromDateInput = document.getElementById('from_date');
            const weeksInput = document.getElementById('weeks');
            const endDatePreview = document.getElementById('end_date_preview');
            
            // set def. date
            const today = new Date();
            const formattedDate = today.toISOString().split('T')[0];
            fromDateInput.value = formattedDate;
            
            // Update end date preview
            function updateEndDatePreview() {
                const startDate = new Date(fromDateInput.value);
                const weeks = parseInt(weeksInput.value) || 0;
                
                if (startDate && !isNaN(startDate) && weeks > 0) {
                    const endDate = new Date(startDate);
                    endDate.setDate(endDate.getDate() + (weeks * 7) - 1);
                    
                    const options = { year: 'numeric', month: 'short', day: 'numeric' };
                    endDatePreview.value = endDate.toLocaleDateString(undefined, options);
                } else {
                    endDatePreview.value = 'Invalid date or weeks';
                }
            }
            
            // Initialize end date preview
            updateEndDatePreview();
            
            // create plan modal
            function showCreatePlanModal() {
                createPlanModal.style.display = 'block';
                createPlanBackdrop.style.display = 'block';
            }
            
            // hide create plan
            function hideCreatePlanModal() {
                createPlanModal.style.display = 'none';
                createPlanBackdrop.style.display = 'none';
            }
            
            // create plan event listener
            createPlanBtn.addEventListener('click', showCreatePlanModal);
            if (createEmptyPlanBtn) {
                createEmptyPlanBtn.addEventListener('click', showCreatePlanModal);
            }
            
            closeCreatePlanModal.addEventListener('click', hideCreatePlanModal);
            cancelCreatePlanBtn.addEventListener('click', hideCreatePlanModal);
            createPlanBackdrop.addEventListener('click', hideCreatePlanModal);
            
            submitCreatePlanBtn.addEventListener('click', function() {
                document.getElementById('createPlanForm').submit();
            });
            
            // update end date
            fromDateInput.addEventListener('change', updateEndDatePreview);
            weeksInput.addEventListener('input', updateEndDatePreview);
            <?php endif; ?>
            
            // Show/hide passed plans toggle
            const showHiddenPlansCheckbox = document.getElementById('showHiddenPlans');
            if (showHiddenPlansCheckbox) {
                showHiddenPlansCheckbox.addEventListener('change', function() {
                    const passedInactiveRows = document.querySelectorAll('.plan-row.passed-row:not(.active-row)');
                    passedInactiveRows.forEach(row => {
                        row.style.display = this.checked ? 'table-row' : 'none';
                    });
                });
            }
            
            // make clickable to go to volunteer page
            document.querySelectorAll('.plan-row').forEach(row => {
                row.addEventListener('click', function(e) {
                    if (e.target.closest('.plans-actions-cell') || e.target.closest('button')) return;
                    window.location.href = 'index.php?page=volunteer&plan_id=' + this.getAttribute('data-plan-id');
                });
            });
        });
    </script>
</body>
</html>