/**
 * seed.js — Cria o superadmin e as configurações iniciais.
 * Execute com: npm run seed
 *
 * Lê as variáveis do .env:
 *   SUPERADMIN_USER=admin
 *   SUPERADMIN_PASS=SuaSenhaForte
 *   EXTENSION_VERSION=3.5.0
 *   DOWNLOAD_URL=https://...
 */
require('dotenv').config();
const mysql = require('mysql2/promise');
const bcrypt = require('bcryptjs');

const dbConfig = {
    host: process.env.DB_HOST || 'localhost',
    user: process.env.DB_USER || 'root',
    password: process.env.DB_PASS || '',
    database: process.env.DB_NAME || 'lovable_licenses',
    charset: 'utf8mb4'
};

async function seed() {
    const conn = await mysql.createConnection(dbConfig);
    console.log('🌱 Iniciando seed do banco...\n');

    try {
        // ── Superadmin ────────────────────────────────────────────────────────
        const adminUser = process.env.SUPERADMIN_USER || 'admin';
        const adminPass = process.env.SUPERADMIN_PASS || 'admin123';

        if (!process.env.SUPERADMIN_USER || !process.env.SUPERADMIN_PASS) {
            console.warn('⚠️  SUPERADMIN_USER/PASS não definidos no .env — usando padrão: admin / admin123');
            console.warn('   Recomendado: defina credenciais fortes no .env antes de ir para produção!\n');
        }

        const [existing] = await conn.execute(
            'SELECT id FROM users WHERE username = ?', [adminUser]
        );

        if (existing.length > 0) {
            console.log(`⚠️  Usuário "${adminUser}" já existe. Pulando criação.`);
        } else {
            const hash = bcrypt.hashSync(adminPass, 12);
            await conn.execute(
                `INSERT INTO users (username, password_hash, role) VALUES (?, ?, 'superadmin')`,
                [adminUser, hash]
            );
            console.log(`✅ Superadmin criado: ${adminUser} / ${adminPass}`);
        }

        // ── App Prompts ──────────────────────────────────────────────────────
        const defaultPrompts = [
            {
                title: 'Refatorar para Clean Code',
                category: 'Desenvolvimento',
                content: 'Analise o seguinte código e sugira refatorações seguindo os princípios de Clean Code (SOLID, DRY, KISS). Foque em legibilidade e manutenibilidade:\n\n[COLE SEU CÓDIGO AQUI]'
            },
            {
                title: 'Gerar Testes Unitários',
                category: 'Testes',
                content: 'Crie uma suite completa de testes unitários para a seguinte função/classe, cobrindo casos de sucesso, erro e bordas:\n\n[COLE SEU CÓDIGO AQUI]'
            },
            {
                title: 'Explicar Lógica Complexa',
                category: 'Explicação',
                content: 'Explique de forma didática o que este trecho de código faz, passo a passo, identificando possíveis gargalos ou bugs:\n\n[COLE SEU CÓDIGO AQUI]'
            },
            {
                title: 'Otimizar Performance (SQL)',
                category: 'Banco de Dados',
                content: 'Analise esta query SQL e sugira otimizações de performance, como criação de índices ou reescrita de joins:\n\n[COLE SUA QUERY AQUI]'
            }
        ];

        for (const p of defaultPrompts) {
            const [exists] = await conn.execute('SELECT id FROM app_prompts WHERE title = ?', [p.title]);
            if (exists.length === 0) {
                await conn.execute(
                    'INSERT INTO app_prompts (title, content, category, is_active) VALUES (?, ?, ?, TRUE)',
                    [p.title, p.content, p.category]
                );
                console.log(`  📝 Prompt: ${p.title}`);
            }
        }

        // ── App Broadcasts ──────────────────────────────────────────────────
        const defaultBroadcasts = [
            {
                message: '🚀 Bem-vindo ao Relovable 5.0! O seu painel de gerenciamento está online.',
                type: 'info'
            }
        ];

        for (const b of defaultBroadcasts) {
            const [exists] = await conn.execute('SELECT id FROM app_broadcasts WHERE message = ?', [b.message]);
            if (exists.length === 0) {
                await conn.execute(
                    'INSERT INTO app_broadcasts (message, type, is_active) VALUES (?, ?, TRUE)',
                    [b.message, b.type]
                );
                console.log(`  📢 Broadcast: ${b.message.substring(0, 30)}...`);
            }
        }

        console.log('\n✅ Seed concluído com sucesso!\n');

    } catch (err) {
        console.error('❌ Erro no seed:', err.message);
        process.exit(1);
    } finally {
        await conn.end();
    }
}

seed();
