<?php

/**
 * Migration: seed gauth permissions and roles if tables are empty
 * Date: 2026-06-07
 */

return function(\Fury\Modules\ThinBuilder\ThinBuilder $tb) {
    // Seed roles (idempotent — INSERT IGNORE skips duplicates)
    $roles = [
        ['superadmin', 'Суперадминистратор', 1, json_encode(['*'])],
        ['admin', 'Администратор', 1, json_encode(['devices.*', 'areas.*', 'scripts.*', 'firmware.*', 'admin.users', 'admin.roles', 'admin.audit', 'settings.edit'])],
        ['user', 'Пользователь', 1, json_encode(['devices.view', 'devices.scan', 'devices.control', 'devices.setup', 'areas.view', 'scripts.view', 'scripts.run'])],
        ['guest', 'Гость', 0, json_encode(['devices.view'])],
    ];
    $stmt = $tb->prepare("
        INSERT IGNORE INTO shserv_roles (slug, name, is_system, default_permissions)
        VALUES (?, ?, ?, ?)
    ");
    foreach ($roles as $role) {
        $stmt->execute($role);
    }

    // Seed permissions
    $permissions = [
        ['devices.view', 'Просмотр устройств', 'Просмотр списка устройств и их статуса', json_encode(['superadmin' => true, 'admin' => true, 'user' => true, 'guest' => true])],
        ['devices.scan', 'Сканирование сети', 'Поиск новых устройств в локальной сети', json_encode(['superadmin' => true, 'admin' => true, 'user' => true, 'guest' => false])],
        ['devices.control', 'Управление устройствами', 'Включение/выключение, изменение состояния каналов', json_encode(['superadmin' => true, 'admin' => true, 'user' => true, 'guest' => false])],
        ['devices.setup', 'Добавление устройств', 'Регистрация новых устройств в системе', json_encode(['superadmin' => true, 'admin' => true, 'user' => true, 'guest' => false])],
        ['devices.edit', 'Редактирование устройств', 'Изменение имени, зоны, схемы каналов', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['devices.delete', 'Удаление устройств', 'Удаление устройств из системы', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['areas.view', 'Просмотр зон', 'Просмотр списка зон', json_encode(['superadmin' => true, 'admin' => true, 'user' => true, 'guest' => true])],
        ['areas.manage', 'Управление зонами', 'Создание, редактирование, удаление зон', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['scripts.view', 'Просмотр скриптов', 'Просмотр списка скриптов автоматизации', json_encode(['superadmin' => true, 'admin' => true, 'user' => true, 'guest' => false])],
        ['scripts.edit', 'Редактирование скриптов', 'Создание и изменение скриптов', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['scripts.run', 'Запуск скриптов', 'Ручной запуск скриптов автоматизации', json_encode(['superadmin' => true, 'admin' => true, 'user' => true, 'guest' => false])],
        ['firmware.view', 'Просмотр прошивок', 'Просмотр списка доступных прошивок', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['firmware.upload', 'Загрузка прошивок', 'Загрузка новых версий прошивок', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['admin.users', 'Управление пользователями', 'Просмотр и редактирование пользователей', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['admin.roles', 'Управление ролями', 'Назначение ролей и прав', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['admin.audit', 'Просмотр аудита', 'Просмотр журнала действий', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
        ['settings.edit', 'Настройки системы', 'Изменение глобальных настроек', json_encode(['superadmin' => true, 'admin' => true, 'user' => false, 'guest' => false])],
    ];
    $stmt = $tb->prepare("
        INSERT IGNORE INTO shserv_permissions (slug, name, description, default_for_roles)
        VALUES (?, ?, ?, ?)
    ");
    foreach ($permissions as $perm) {
        $stmt->execute($perm);
    }

    return true;
};
