const { PrismaClient } = require('@prisma/client');
const bcrypt = require('bcryptjs');
const { generateNIM } = require('./auth');

const prisma = new PrismaClient();

async function seed() {
  try {
    await prisma.$connect();

    const existingAdmin = await prisma.user.findFirst({ where: { role: 'super_admin' } });
    if (!existingAdmin) {
      const hashedPassword = await bcrypt.hash('admin123', 12);
      await prisma.user.create({
        data: {
          email: 'admin@pmb.ac.id',
          password: hashedPassword,
          role: 'super_admin',
          isActive: true,
          profile: {
            create: {
              fullName: 'Super Admin',
              phoneNumber: '081234567890',
              address: 'Kampus PMB',
              statusPendaftaran: 'accepted',
              angkatan: 2026,
            },
          },
        },
      });
      console.log('Super admin seeded: admin@pmb.ac.id / admin123');
    }

    const jurusanList = ['Teknik_Informatika', 'Sistem_Informasi', 'Manajemen', 'Akuntansi'];
    for (const jurusan of jurusanList) {
      const count = await prisma.profile.count({ where: { jurusan } });
      if (count === 0) {
        await prisma.announcement.createMany({
          data: [
            { title: 'Pendaftaran PMB 2026 Dibuka', body: 'Pendaftaran mahasiswa baru tahun 2026 telah resmi dibuka. Segera daftar sebelum kuota penuh.', author: 'PMB Admin', pinned: true, published: true },
            { title: 'Jadwal Ujian Masuk', body: 'Ujian masuk akan dilaksanakan pada tanggal 15 Agustus 2026.', author: 'PMB Admin', pinned: false, published: true },
            { title: 'Beasiswa Prestasi', body: 'Beasiswa prestasi tersedia untuk mahasiswa berprestasi dengan IPK minimal 3.5.', author: 'PMB Admin', pinned: false, published: true },
          ],
        });
      }
    }

    console.log('Database seeded successfully!');
  } catch (error) {
    console.error('Seed error:', error);
    process.exit(1);
  } finally {
    await prisma.$disconnect();
  }
}

if (require.main === module) {
  seed();
}

module.exports = { seed };
