import { pool } from '../db.js';

const ticketSubjects = [
    "Problema com o cadastro de vagas",
    "Não consigo visualizar candidatos",
    "Erro ao salvar perfil da empresa",
    "Dúvida sobre planos de assinatura",
    "Bug no upload de logo",
    "Solicitação de reembolso",
    "Denúncia de vaga falsa",
    "Como alterar email da conta?",
    "Integração com ATS não funciona",
    "Sugestão de melhoria para o dashboard"
];

const messages = [
    "Olá, estou com dificuldades para realizar X ação.",
    "Poderiam me ajudar? O sistema apresenta erro 500.",
    "Gostaria de saber mais informações sobre isso.",
    "Aguardo retorno urgente, obrigado.",
    "A funcionalidade parou de funcionar de repente."
];

const adminReplies = [
    "Olá, já estamos verificando o seu caso.",
    "Poderia fornecer mais detalhes?",
    "O problema foi resolvido, por favor tente novamente.",
    "Encaminhei para o time técnico.",
    "Agradecemos o feedback."
];

export async function seedTickets() {
    console.log('🎫 Seeding support tickets...');

    try {
        // Get all users
        const usersRes = await pool.query('SELECT id FROM users');
        const users = usersRes.rows;

        if (users.length === 0) {
            console.log('   ⚠️ No users found. Skipping tickets seeding.');
            return;
        }

        // Get system admin user for replies
        const adminRes = await pool.query("SELECT id FROM users WHERE role = 'admin' OR role = 'super_admin' LIMIT 1");
        const adminId = adminRes.rows[0]?.id || users[0].id;

        let ticketCount = 0;

        // Create 20 random tickets
        for (let i = 0; i < 20; i++) {
            const userId = users[Math.floor(Math.random() * users.length)].id;
            const subject = ticketSubjects[Math.floor(Math.random() * ticketSubjects.length)];
            const status = ['open', 'in_progress', 'closed'][Math.floor(Math.random() * 3)];
            const priority = ['low', 'medium', 'high'][Math.floor(Math.random() * 3)];

            // Create Ticket
            const ticketRes = await pool.query(`
                INSERT INTO tickets (user_id, subject, status, priority, created_at)
                VALUES ($1, $2, $3, $4, NOW() - (random() * interval '30 days'))
                RETURNING id, created_at
            `, [userId, subject, status, priority]);

            const ticketId = ticketRes.rows[0].id;
            const ticketCreatedAt = new Date(ticketRes.rows[0].created_at);

            // Create initial message from user
            await pool.query(`
                INSERT INTO ticket_messages (ticket_id, user_id, message, created_at)
                VALUES ($1, $2, $3, $4)
            `, [
                ticketId,
                userId,
                messages[Math.floor(Math.random() * messages.length)],
                ticketCreatedAt
            ]);

            // If not open, maybe add some replies
            if (status !== 'open') {
                // Admin reply
                await pool.query(`
                    INSERT INTO ticket_messages (ticket_id, user_id, message, created_at)
                    VALUES ($1, $2, $3, $4)
                `, [
                    ticketId,
                    adminId,
                    adminReplies[Math.floor(Math.random() * adminReplies.length)],
                    new Date(ticketCreatedAt.getTime() + 3600000) // +1 hour
                ]);
            }

            ticketCount++;
        }

        console.log(`   ✓ ${ticketCount} tickets seeded`);

    } catch (error) {
        console.error('   ❌ Error seeding tickets:', error.message);
        throw error;
    }
}
