CREATE DATABASE IF NOT EXISTS eclipseon CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE eclipseon;


CREATE TABLE games (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(190) NOT NULL,
  slug VARCHAR(190) NOT NULL UNIQUE,
  genre VARCHAR(120) DEFAULT NULL,
  version_label VARCHAR(120) DEFAULT NULL,
  short_description VARCHAR(255) DEFAULT NULL,
  description TEXT DEFAULT NULL,
  status ENUM('downloadable','released','in_development','blocked','removed') NOT NULL DEFAULT 'in_development',
  cover_url VARCHAR(255) DEFAULT NULL,
  banner_url VARCHAR(255) DEFAULT NULL,
  download_url VARCHAR(255) DEFAULT NULL,
  download_size VARCHAR(100) DEFAULT NULL,
  release_note TEXT DEFAULT NULL,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE studio_news (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(190) NOT NULL,
  excerpt VARCHAR(255) DEFAULT NULL,
  content TEXT DEFAULT NULL,
  is_published TINYINT(1) NOT NULL DEFAULT 1,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE balance_transactions (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT NOT NULL,
  amount DECIMAL(12,2) NOT NULL DEFAULT 0.00,
  direction ENUM('credit','debit') NOT NULL DEFAULT 'credit',
  note VARCHAR(255) DEFAULT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_balance_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE faq_items (
  id INT AUTO_INCREMENT PRIMARY KEY,
  question VARCHAR(255) NOT NULL,
  answer TEXT DEFAULT NULL,
  sort_order INT NOT NULL DEFAULT 0,
  is_active TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE download_logs (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT NOT NULL,
  game_id INT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_download_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
  CONSTRAINT fk_download_game FOREIGN KEY (game_id) REFERENCES games(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE legal_pages (
  slug VARCHAR(50) PRIMARY KEY,
  title VARCHAR(190) NOT NULL,
  content LONGTEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO games (title,slug,genre,version_label,short_description,description,status,cover_url,banner_url,download_url,download_size,release_note) VALUES
('Nebula Drift','nebula-drift','Sci‑Fi Action','Build 0.9.7','Флагманский космический экшен с доступным демо-билдом.','Nebula Drift — атмосферный экшен о дальнем космосе, манёврах на грани перегрева и тяжёлых столкновениях на фоне разрушенных орбитальных комплексов. Страница релиза показывает статус проекта, а активный билд открывается только тогда, когда администрация помечает игру как downloadable.','downloadable','','','downloads/eclipseon-demo-build.txt','18.4 GB','В этой сборке переработаны стартовая секция, ощущения от полёта, звуковой слой и баланс первого сюжетного акта.'),
('Shadow Pulse','shadow-pulse','Action / Stealth','Prototype 3','Неоновый боевик в активной разработке.','Shadow Pulse находится в стадии интенсивной разработки. Пользователь видит карточку, статус и описание, но не получает файл, пока игра официально не будет переведена в downloadable или released.','in_development','','',NULL,'—','Команда собирает вертикальный срез и стабилизирует визуальную идентичность проекта.'),
('Solar Break','solar-break','Arcade','Release 1.0','Аркадный релиз студии без открытой раздачи файла.','Solar Break уже вышла как публичный релиз студии, но раздача клиента остаётся отключённой. Такой статус удобен для лендингов, витрин и анонсов без обязательной загрузки файла.','released','','',NULL,'—','Релиз опубликован, но файл выдаётся выборочно.'),
('Ghost Protocol','ghost-protocol','Tactical / Noir','Internal Build','Сборка временно скрыта администрацией.','Проект временно ограничен по юридическим или техническим причинам. Пользователь может увидеть страницу проекта, но скачать билд нельзя.','blocked','','',NULL,'—','Публичный доступ заблокирован до завершения проверки.'),
('Ruin Sector','ruin-sector','Survival','Archive','Проект снят с витрины.','Игра снята с публикации и переведена в архивный статус. Карточка сохраняется для управленческой истории и возможного возвращения в витрину.','removed','','',NULL,'—','Проект переведён в архив и скрыт из активной дистрибуции.');

INSERT INTO studio_news (title,excerpt,content,is_published) VALUES
('Eclipseon усиливает платформу релизов','Обновлена студийная витрина, юридический блок и библиотека игр.','Платформа Eclipseon получила более глубокую структуру пользовательского кабинета, новый визуальный язык, расширенный юридический блок и улучшенную панель для публикации релизов.',1),
('Nebula Drift получила свежий demo build','Новый билд уже доступен в библиотеке.','Команда обновила onboarding, звуковые слои, визуальные эффекты манёвров и стабильность в стартовом коридоре кампании.',1),
('Shadow Pulse продолжает разработку','Статус проекта остаётся in development.','Студия продолжает работу над вертикальным срезом, визуальной дисциплиной и редакцией сюжетной подачи проекта.',1),
('Solar Break остаётся в публичном релизе','Релиз опубликован без открытой раздачи клиента.','Такой формат позволяет сохранить студийную витрину релиза и включать выдачу сборки позже, отдельным решением администрации.',1);

INSERT INTO balance_transactions (user_id,amount,direction,note) VALUES
(1,15000.00,'credit','Стартовый баланс владельца платформы'),
(1,-10.00,'debit','Сервисная корректировка для проверки логики списаний'),
(2,5000.00,'credit','Операционный баланс администратора'),
(3,5000.00,'credit','Бюджет продюсера на тестовые публикации'),
(4,1490.00,'credit','Промо-баланс участника сообщества'),
(4,120.00,'credit','Бонус за участие в закрытом тесте');

INSERT INTO download_logs (user_id,game_id) VALUES (4,1),(4,1),(1,1);

INSERT INTO faq_items (question,answer,sort_order,is_active) VALUES
('Почему я не могу скачать некоторые игры?','Скачивание открывается только для статуса downloadable. Если игра находится в статусе released, in development, blocked или removed, страница проекта остаётся доступной как витрина без выдачи файла.',1,1),
('Что означает frozen или banned аккаунт?','Frozen означает временную заморозку доступа для проверки. Banned означает блокировку за нарушение правил платформы. В обоих случаях пользователь видит отдельную информационную страницу и не попадает в кабинет.',2,1),
('Для чего нужен баланс в кабинете?','Баланс показывает внутренние бонусы, промо-начисления, компенсации и будущие студийные кредиты. Он не является банковским счётом и регулируется правилами платформы.',3,1),
('Можно ли вернуть удалённую игру в библиотеку?','Да, если администрация переведёт проект из статуса removed в другой статус и обновит карточку в admin HQ.',4,1);

INSERT INTO legal_pages (slug,title,content) VALUES
('offer','Публичная оферта Eclipseon','<h1>Публичная оферта платформы Eclipseon</h1><p>Настоящий документ определяет правила предоставления доступа к цифровой платформе Eclipseon, личному кабинету пользователя, библиотеке игр студии, страницам релизов, внутреннему бонусному балансу, новостным публикациям, юридическим документам и иным элементам экосистемы. Используя сайт, регистрируясь на платформе, скачивая сборки или продолжая работу после публикации новой редакции документа, пользователь подтверждает принятие условий в полном объёме.</p><h2>1. Статус платформы и предмет договора</h2><p>Eclipseon — это цифровая платформа студии разработки игр, объединяющая пользовательский кабинет и отдельную административную зону. Пользователь получает ограниченный, отзывный, неисключительный доступ к интерфейсу платформы, контентным материалам, библиотеке студии, личным настройкам, профилю, истории операций и, в допустимых случаях, к цифровым билдам игр.</p><p>Предоставление доступа к конкретным функциям, файлам, публикациям, бонусам, балансу и отдельным релизам зависит от статуса аккаунта пользователя, административных решений, статуса игры, действующей политики публикации, договорных ограничений и применимого законодательства. Студия вправе изменять состав доступных функций без предварительного персонального уведомления, если такие изменения направлены на безопасность, соответствие закону, улучшение продукта или защиту прав студии.</p><h2>2. Аккаунт, регистрация и сохранность доступа</h2><p>Пользователь обязан указывать актуальные и достоверные данные, самостоятельно обеспечивать конфиденциальность логина и пароля, не передавать доступ третьим лицам, не использовать чужие учётные записи и не создавать аккаунты в целях обхода санкций, банов, лимитов или правил начисления баланса. Любые действия, совершённые под аккаунтом пользователя, считаются совершёнными им лично до момента доказанного компрометирования доступа.</p><p>Студия вправе приостановить использование аккаунта, временно заморозить доступ, ввести дополнительные проверки, запросить подтверждающие сведения либо ограничить отдельные функции кабинета при наличии признаков фрода, ботоводства, злоупотреблений, несанкционированного распространения билдов, использования уязвимостей, жалоб правообладателей или иных рисков для сервиса.</p><h2>3. Игры, релизы и режимы доступности</h2><p>Карточки игр в библиотеке имеют разные статусы: <strong>downloadable</strong> — доступен файл для скачивания; <strong>released</strong> — релиз опубликован, но открытая загрузка может быть отключена; <strong>in_development</strong> — проект находится в разработке и служит витриной без выдачи клиента; <strong>blocked</strong> — доступ к проекту временно ограничен; <strong>removed</strong> — игра снята с активной витрины. Пользователь понимает, что публикация карточки игры не гарантирует её постоянную доступность, а наличие загрузки не означает сохранение файла в библиотеке на неограниченный срок.</p><p>Пользователь не вправе продавать, зеркалировать, декомпилировать, перепаковывать, распространять, публиковать на сторонних ресурсах, использовать в коммерческих целях или иным образом монетизировать билды, если студия прямо и письменно не разрешила такие действия. Любые права на игры, бренд, визуальные материалы, интерфейс и тексты сохраняются за студией и правообладателями.</p><h2>4. Внутренний баланс и операции</h2><p>Баланс пользователя является внутренним цифровым показателем платформы и используется для отражения бонусов, промо-начислений, маркетинговых компенсаций, тестовых кредитов и иных студийных механик. Баланс не является электронными деньгами, банковским счётом, вкладом или финансовым продуктом. Пользователь не вправе требовать автоматического обмена баланса на фиатные средства вне отдельно опубликованных правил студии.</p><p>Студия вправе корректировать ошибочные начисления, аннулировать бонусы, приостанавливать операции и отражать в истории служебные записи, связанные с модерацией, аудитом и расследованием злоупотреблений. Любые операции на балансе считаются предварительными до завершения проверки внутренней системой и администрацией.</p><h2>5. Основания для ограничения доступа</h2><p>Основаниями для заморозки, блокировки или удаления аккаунта могут являться: нарушение настоящей оферты и правил, токсичное поведение, попытка подмены личности, несанкционированная публикация билдов, обход технических ограничений, фрод, мультиаккаунтинг, атаки на инфраструктуру, публикация конфиденциальных материалов, незаконное использование интеллектуальной собственности, распространение вредоносных программ, дестабилизация сообщества, использование уязвимостей, а также действия, создающие юридические, технические или репутационные риски для Eclipseon.</p><h2>6. Ограничение ответственности</h2><p>Платформа, библиотека, игры, новости, баланс и сопутствующие цифровые материалы предоставляются по принципу «как есть» и «по мере доступности». Студия не гарантирует бесперебойную работу сервиса, постоянную доступность каждого билда, отсутствие багов, совместимость со всем программным и аппаратным обеспечением пользователя, а также отсутствие внешних факторов, препятствующих скачиванию или использованию материалов.</p><p>В максимальной степени, допустимой законом, студия не несёт ответственности за косвенные убытки, потерю данных, потерю деловой репутации, невозможность загрузки игр по вине провайдера, региональных ограничений, действий третьих лиц, взлома аккаунта по вине пользователя, аппаратной несовместимости, временной остановки инфраструктуры или удаления релиза с витрины.</p><h2>7. Коммуникации, изменения и применимое право</h2><p>Студия вправе в любое время обновлять платформу, менять структуру кабинета, объём функций, тексты юридических документов и правила использования. Новая редакция документов вступает в силу с момента публикации на сайте, если иное прямо не указано в соответствующем документе. Продолжение использования платформы после публикации обновлений означает согласие пользователя с новой редакцией.</p><p>Все споры решаются в соответствии с применимым правом и в порядке, установленном обязательными нормами. До обращения в суд стороны рекомендуют направить претензию через официальные каналы связи студии, указанные на платформе или в реквизитах соответствующего юридического документа.</p>'),
('terms','Правила платформы Eclipseon','<h1>Правила использования платформы Eclipseon</h1><p>Настоящие правила обязательны для всех пользователей платформы и распространяются на использование личного кабинета, библиотеки игр, страниц релизов, новостных публикаций, внутреннего баланса, FAQ и любых иных материалов, доступных через интерфейс Eclipseon.</p><h2>1. Базовые стандарты поведения</h2><ul><li>Используйте платформу добросовестно и только по её назначению.</li><li>Не пытайтесь получить доступ к чужим аккаунтам, скрытым разделам, служебным системам и неопубликованным сборкам.</li><li>Не распространяйте вредоносные файлы, скрипты, эксплойты, фишинговые материалы и ссылки на них.</li><li>Не выдавайте себя за администратора, представителя студии или правообладателя без прямого уполномочивания.</li></ul><h2>2. Игры, сборки и цифровые материалы</h2><p>Если игра доступна для скачивания, это не создаёт права на её дальнейшее публичное распространение. Пользователю запрещается публиковать билды на файлообменниках, делиться прямыми ссылками в открытом доступе, выполнять декомпиляцию, datamining, модификацию клиента в обход условий студии, удалять указания об авторских правах, а также передавать доступ к библиотеке третьим лицам.</p><p>При статусах <strong>blocked</strong> и <strong>removed</strong> пользователь обязан воздержаться от попыток восстановления доступа к игре обходными способами. Попытки обойти блокировку рассматриваются как отдельное нарушение.</p><h2>3. Аккаунты и модерация</h2><p>За нарушение правил администрация вправе вынести предупреждение, временно заморозить аккаунт, заблокировать пользователя или перевести учётную запись в статус удалённой. Заморозка применяется при проверке обстоятельств и подозрительной активности. Бан применяется при существенных нарушениях, включая утечки, оскорбления, мошенничество, повторный обход ограничений и действия, наносящие вред студии, сообществу или инфраструктуре.</p><h2>4. Баланс и бонусные механики</h2><p>Промо-баланс не является платёжным инструментом. Запрещается искусственно накручивать начисления, использовать системные ошибки ради бонусов, создавать мультиаккаунты под промо-механики, требовать несанкционированной конвертации баланса или вводить администрацию в заблуждение относительно операций по счёту.</p><h2>5. Коммуникации и репутация</h2><p>На платформе запрещаются угрозы, травля, экстремистский контент, дискриминационные материалы, ложные обвинения без доказательств, публикация чужих персональных данных, сознательное распространение фейков о студии, а также массовые действия, направленные на репутационный ущерб Eclipseon или её партнёрам.</p><h2>6. Исполнение правил</h2><p>Администрация вправе применять меры немедленно, если нарушение требует быстрой защиты платформы, релизов, пользователей или инфраструктуры. Пользователь обязан самостоятельно отслеживать актуальную редакцию правил на сайте.</p>'),
('privacy','Политика конфиденциальности Eclipseon','<h1>Политика конфиденциальности Eclipseon</h1><p>Мы обрабатываем только те сведения, которые необходимы для функционирования платформы, обеспечения безопасности, работы личного кабинета, поддержки библиотеки релизов, отображения баланса, истории операций и исполнения юридических обязанностей.</p><h2>1. Какие данные обрабатываются</h2><p>Платформа может хранить имя, email, хэш пароля, настройки профиля, аватар, роль пользователя, статус аккаунта, записи о начислениях внутреннего баланса, историю скачиваний, технические журналы сессии и служебные данные, необходимые для защиты платформы.</p><h2>2. Цели обработки</h2><p>Данные используются для аутентификации, персонализации кабинета, обеспечения безопасности, предотвращения злоупотреблений, поддержки ролевой модели, публикации пользовательского контента профиля, отображения истории операций и исполнения требований закона.</p><h2>3. Хранение и защита</h2><p>Пароли не хранятся в открытом виде. Мы используем хэширование и технические меры по ограничению доступа. Срок хранения зависит от характера данных, требований безопасности, необходимости расследования инцидентов и применимого законодательства.</p><h2>4. Передача третьим лицам</h2><p>Студия не продаёт пользовательские данные рекламодателям. Передача допускается в пределах, необходимых для работы хостинга, технической инфраструктуры, защиты прав студии, исполнения обязательных требований закона и взаимодействия с подрядчиками, обеспечивающими поддержку сервиса.</p><h2>5. Права пользователя</h2><p>Пользователь вправе актуализировать часть данных в своём профиле, обращаться по вопросам корректировки и ограничения обработки, а также запрашивать разъяснения по статусу аккаунта. Некоторые записи могут сохраняться после прекращения активного использования платформы, если это требуется для безопасности, защиты интересов студии или исполнения юридических обязанностей.</p>');
