<?php
require 'inc/config.php';

// Проверка авторизации
if (!checkAuth()) {
    header('Location: login.php');
    exit;
}

// Обработка добавления линии
if (isset($_POST['add_line'])) {
    $color = $_POST['line_color'];
    if (!preg_match('/^#[0-9A-F]{6}$/i', $color)) {
        $color = '#4CAF50';
    }
    
    $line_id = (int)$_POST['line_id'];
    $line_name = trim($_POST['line_name']);
    
    if ($line_id > 0 && !empty($line_name)) {
        // Проверяем, не существует ли уже линии с таким ID
        $check = $pdo->prepare("SELECT id FROM metro_lines WHERE id = ?");
        $check->execute([$line_id]);
        
        if (!$check->fetch()) {
            // ID свободен - создаем линию с указанным ID
            $stmt = $pdo->prepare("INSERT INTO `metro_lines` (id, name, color) VALUES (?, ?, ?)");
            $stmt->execute([$line_id, $line_name, $color]);
        } else {
            // ID занят - создаем с автоинкрементом
            $stmt = $pdo->prepare("INSERT INTO `metro_lines` (name, color) VALUES (?, ?)");
            $stmt->execute([$line_name, $color]);
        }
    }
    
    // Редирект после добавления чтобы очистить POST данные
    header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?'));
    exit;
}

// Обработка обновления линии
if (isset($_POST['update_line'])) {
    $new_id = (int)$_POST['new_line_id'];
    $old_id = (int)$_POST['old_line_id'];
    $name = trim($_POST['line_name']);
    $color = $_POST['line_color'];
    
    if (!preg_match('/^#[0-9A-F]{6}$/i', $color)) {
        $color = '#4CAF50';
    }
    
    if ($new_id > 0 && $old_id > 0 && !empty($name)) {
        if ($new_id != $old_id) {
            // Проверяем, не существует ли уже линии с новым ID
            $check = $pdo->prepare("SELECT id FROM metro_lines WHERE id = ?");
            $check->execute([$new_id]);
            
            if (!$check->fetch()) {
                // Новый ID свободен - обновляем
                $stmt = $pdo->prepare("UPDATE metro_lines SET id = ?, name = ?, color = ? WHERE id = ?");
                $stmt->execute([$new_id, $name, $color, $old_id]);
            }
        } else {
            // ID не менялся - обновляем только имя и цвет
            $stmt = $pdo->prepare("UPDATE metro_lines SET name = ?, color = ? WHERE id = ?");
            $stmt->execute([$name, $color, $old_id]);
        }
    }
    
    // Редирект после обновления
    header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?'));
    exit;
}

// Обработка добавления станции
if (isset($_POST['add_station'])) {
    $line_id = (int)$_POST['line_id'];
    $station_name = trim($_POST['station_name']);
    
    if ($line_id > 0 && !empty($station_name)) {
        $stmt = $pdo->prepare("INSERT INTO `stations` (line_id, name) VALUES (?, ?)");
        $stmt->execute([$line_id, $station_name]);
    }
    
    // Редирект после добавления
    header('Location: ' . $_SERVER['REQUEST_URI']);
    exit;
}

// Обработка удаления станции
if (isset($_GET['del_station'])) {
    $station_id = (int)$_GET['del_station'];
    if ($station_id > 0) {
        $pdo->prepare("DELETE FROM `stations` WHERE id = ?")->execute([$station_id]);
    }
    
    // Редирект после удаления чтобы очистить URL
    header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?'));
    exit;
}

// Обработка удаления линии
if (isset($_GET['del_line'])) {
    $line_id = (int)$_GET['del_line'];
    
    if ($line_id > 0) {
        try {
            // Удаляем линию (каскадное удаление должно удалить все связанные станции)
            $pdo->prepare("DELETE FROM metro_lines WHERE id = ?")->execute([$line_id]);
            
        } catch (PDOException $e) {
            // Если каскадное удаление не работает, удаляем вручную
            try {
                // Сначала удаляем изображения
                $pdo->prepare("DELETE i FROM images i 
                              JOIN stations s ON i.station_id = s.id 
                              WHERE s.line_id = ?")->execute([$line_id]);
                
                // Затем удаляем категории
                $pdo->prepare("DELETE sc FROM station_categories sc 
                              JOIN stations s ON sc.station_id = s.id 
                              WHERE s.line_id = ?")->execute([$line_id]);
                
                // Затем удаляем станции
                $pdo->prepare("DELETE FROM stations WHERE line_id = ?")->execute([$line_id]);
                
                // И наконец удаляем линию
                $pdo->prepare("DELETE FROM metro_lines WHERE id = ?")->execute([$line_id]);
                
            } catch (PDOException $e2) {
                die("Ошибка при удалении линии: " . $e2->getMessage());
            }
        }
    }
    
    // Редирект после удаления чтобы очистить URL
    header('Location: ' . strtok($_SERVER['REQUEST_URI'], '?'));
    exit;
}

// Получаем список линий (исключаем линию общей галереи)
$lines = $pdo->query("SELECT * FROM `metro_lines` WHERE id != 999 ORDER BY id DESC")->fetchAll();

// Получаем следующй доступный ID для формы
$next_id_result = $pdo->query("SELECT COALESCE(MAX(id), 0) + 1 as next_id FROM metro_lines WHERE id != 999")->fetch();
$next_id = $next_id_result['next_id'];

// Получаем информацию о общей галерее
$gallery_line = $pdo->query("SELECT * FROM metro_lines WHERE id = 999")->fetch();
$gallery_station = $pdo->query("SELECT id FROM stations WHERE line_id = 999 LIMIT 1")->fetch();
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css">
<title>Список станций метро</title>
<style>
.edit-form { 
    display: none; 
    margin-top: 15px; 
    padding: 20px; 
    background: #f8f9fa; 
    border-radius: 8px; 
    border: 1px solid #ddd; 
}
.edit-form.active { 
    display: block; 
}
.line-actions { 
    display: flex; 
    gap: 10px; 
    align-items: center; 
}
.form-buttons { 
    display: flex; 
    gap: 10px; 
    margin-top: 15px;
}
.line-info {
    display: flex;
    align-items: center;
    gap: 15px;
    flex: 1;
}
.line-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px;
    background: #f8f9fa;
    border-bottom: 1px solid #e9ecef;
}
.gallery-section {
    margin-bottom: 30px;
}
.gallery-card {
    background: white;
    border: 2px solid #6c757d;
    border-radius: 12px;
    padding: 25px;
    text-align: center;
    box-shadow: 0 2px 10px rgba(0,0,0,0.08);
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.gallery-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 6px 20px rgba(0,0,0,0.15);
}
.gallery-title {
    margin: 0 0 15px 0;
    color: #333;
    font-size: 1.4em;
}
.gallery-description {
    color: #666;
    margin-bottom: 20px;
    font-size: 14px;
}
</style>
</head>
<body>
<?php if (checkAuth()): ?>
<div class="user-panel">
    <div class="container">
        <div class="user-info">
            Вы вошли как: <strong><?= htmlspecialchars(getUsername()) ?></strong>
            <a href="logout.php" class="btn btn-secondary small">Выйти</a>
        </div>
    </div>
</div>
<?php endif; ?>

<div class="container">
    <h1>Список станций метро</h1>

    <!-- Форма добавления линии -->
    <div class="form-section">
        <h2>Добавить новую линию</h2>
        <form method="post" class="add-form">
            <div class="form-group">
                <input type="number" name="line_id" value="<?= $next_id ?>" min="1" required class="text-input">
                <div class="form-help">Следующий доступный ID: <?= $next_id ?></div>
            </div>
            <div class="form-group">
                <input type="text" name="line_name" placeholder="Название линии" required class="text-input">
            </div>
            <div class="form-group">
                <label>Цвет линии:</label>
                <div class="color-input-group">
                    <input type="color" id="colorPicker" value="#4CAF50" class="color-picker">
                    <input type="text" name="line_color" id="colorText" value="#4CAF50" placeholder="#FFFFFF" 
                           pattern="^#[0-9A-Fa-f]{6}$" class="color-text">
                </div>
                <div class="form-help">Формат: #FFFFFF</div>
            </div>
            <button type="submit" name="add_line" class="btn btn-primary">Добавить линию</button>
        </form>
    </div>

    <!-- Кнопка общей галереи -->
    <?php if ($gallery_line && $gallery_station): ?>
    <div class="gallery-section">
        <div class="gallery-card">
            <a href="station.php?id=<?= $gallery_station['id'] ?>" class="btn btn-primary">
                Общая галерея
            </a>
        </div>
    </div>
    <?php endif; ?>

    <?php if (empty($lines)): ?>
        <div class="empty-state">
            <p>Нет добавленных линий. Добавьте первую линию используя форму выше.</p>
        </div>
    <?php else: ?>
        <div class="lines-container">
            <?php foreach ($lines as $line): ?>
            <?php
            // Получаем станции для этой линии
            $st = $pdo->prepare('SELECT * FROM stations WHERE line_id = ? ORDER BY name');
            $st->execute([$line['id']]);
            $stations = $st->fetchAll();
            $stations_count = count($stations);
            ?>
            <div class="line-card" style="border-left: 6px solid <?= htmlspecialchars($line['color']) ?>">
                <div class="line-header">
                    <div class="line-info">
                        <h2 class="line-name">
                            (<?= $line['id'] ?>) <?= htmlspecialchars($line['name']) ?>
                        </h2>
                        <div class="line-color-badge" style="background: <?= htmlspecialchars($line['color']) ?>" 
                             title="Цвет линии: <?= htmlspecialchars($line['color']) ?>"></div>
                    </div>
                    <div class="line-actions">
                        <button class="btn btn-warning small edit-line-btn" 
                                data-line-id="<?= $line['id'] ?>"
                                title="Редактировать линию">
                            Редактировать
                        </button>
                        <button class="btn btn-danger" 
                                data-href="?del_line=<?= $line['id'] ?>"
                                data-name="линию &laquo;<?= htmlspecialchars($line['name']) ?>&raquo;"
                                title="Удалить линию и все её станции">
                            Удалить линию
                        </button>
                    </div>
                </div>
                
                <!-- Форма редактирования линии -->
                <div class="edit-form" id="edit-form-<?= $line['id'] ?>">
                    <h3>Редактировать линию</h3>
                    <form method="post" class="add-form">
                        <input type="hidden" name="old_line_id" value="<?= $line['id'] ?>">
                        <div class="form-group">
                            <label>Новый ID линии:</label>
                            <input type="number" name="new_line_id" value="<?= $line['id'] ?>" min="1" required class="text-input">
                            <div class="form-help">Текущий ID: <?= $line['id'] ?></div>
                        </div>
                        <div class="form-group">
                            <label>Название линии:</label>
                            <input type="text" name="line_name" value="<?= htmlspecialchars($line['name']) ?>" required class="text-input">
                        </div>
                        <div class="form-group">
                            <label>Цвет линии:</label>
                            <div class="color-input-group">
                                <input type="color" value="<?= htmlspecialchars($line['color']) ?>" 
                                       class="color-picker-edit" 
                                       data-target="color-edit-<?= $line['id'] ?>">
                                <input type="text" name="line_color" 
                                       id="color-edit-<?= $line['id'] ?>" 
                                       value="<?= htmlspecialchars($line['color']) ?>" 
                                       pattern="^#[0-9A-Fa-f]{6}$" 
                                       class="color-text">
                            </div>
                        </div>
                        <div class="form-buttons">
                            <button type="submit" name="update_line" class="btn btn-success">Сохранить изменения</button>
                            <button type="button" class="btn btn-secondary cancel-edit">Отмена</button>
                        </div>
                    </form>
                </div>
                
                <div class="stations-section">
                    <h3>Станции линии (<?= $stations_count ?>)</h3>
                    
                    <div class="stations-list">
                        <?php if ($stations_count === 0): ?>
                            <div class="empty-state small">
                                <p>На этой линии пока нет станций</p>
                            </div>
                        <?php else: ?>
                            <?php foreach ($stations as $station): ?>
                            <div class="station-item">
                                <a href="station.php?id=<?= $station['id'] ?>" class="station-link">
                                    <?= htmlspecialchars($station['name']) ?>
                                </a>
                                <button class="btn btn-danger small" 
                                        data-href="?del_station=<?= $station['id'] ?>"
                                        data-name="станцию &laquo;<?= htmlspecialchars($station['name']) ?>&raquo;"
                                        title="Удалить станцию">
                                    Удалить
                                </button>
                            </div>
                            <?php endforeach; ?>
                        <?php endif; ?>
                    </div>
                    
                    <form method="post" class="add-form compact">
                        <input type="hidden" name="line_id" value="<?= $line['id'] ?>">
                        <div class="form-group">
                            <input type="text" name="station_name" placeholder="Введите название новой станции" required class="text-input">
                        </div>
                        <button type="submit" name="add_station" class="btn btn-success">Добавить станцию</button>
                    </form>
                </div>
            </div>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>
</div>

<script>
// Обработка удаления линий и станций
document.querySelectorAll('.btn-danger').forEach(btn => {
    btn.addEventListener('click', function(e) {
        e.preventDefault();
        const href = this.getAttribute('data-href');
        const name = this.getAttribute('data-name');
        
        if (confirm(`Вы уверены, что хотите удалить ${name}?`)) {
            window.location.href = href;
        }
    });
});

// Синхронизация color picker и text input в основной форме
const colorPicker = document.getElementById('colorPicker');
const colorText = document.getElementById('colorText');

if (colorPicker && colorText) {
    colorPicker.addEventListener('input', function() {
        colorText.value = this.value;
    });

    colorText.addEventListener('input', function() {
        if (this.value.match(/^#[0-9A-Fa-f]{6}$/)) {
            colorPicker.value = this.value;
        }
    });
}

// Обработка редактирования линий
document.querySelectorAll('.edit-line-btn').forEach(btn => {
    btn.addEventListener('click', function() {
        const lineId = this.getAttribute('data-line-id');
        const editForm = document.getElementById('edit-form-' + lineId);
        
        // Скрываем все формы редактирования
        document.querySelectorAll('.edit-form').forEach(form => {
            form.classList.remove('active');
        });
        
        // Показываем нужную форму
        editForm.classList.add('active');
        
        // Прокручиваем к форме редактирования
        editForm.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
    });
});

// Отмена редактирования
document.querySelectorAll('.cancel-edit').forEach(btn => {
    btn.addEventListener('click', function() {
        this.closest('.edit-form').classList.remove('active');
    });
});

// Синхронизация color picker в формах редактирования
document.querySelectorAll('.color-picker-edit').forEach(picker => {
    const targetId = picker.getAttribute('data-target');
    const targetInput = document.getElementById(targetId);
    
    if (picker && targetInput) {
        picker.addEventListener('input', function() {
            targetInput.value = this.value;
        });
        
        targetInput.addEventListener('input', function() {
            if (this.value.match(/^#[0-9A-Fa-f]{6}$/)) {
                picker.value = this.value;
            }
        });
    }
});
</script>
</body>
</html>