import { PrismaClient } from '@prisma/client'
import { seedDocumentTemplates } from './document-templates-seed'

const prisma = new PrismaClient()

export async function seedServices() {
  try {
    console.log('🔄 Creating services...')

    const services = [
      {
        id: '1',
        title: 'SPKT',
        slug: 'spkt',
        description: 'Surat Pengantar Keterangan Tanda Terima - Layanan pengurusan surat keterangan dari Kepolisian Sektor',
        category: 'Pelayanan Kepolisian',
        estimatedTime: '1-2 hari kerja',
        iconUrl: '📄',
        linkType: 'INTERNAL',
        linkUrl: '/layanan/spkt',
        status: 'ACTIVE',
        requirements: JSON.stringify([
          'Fotokopi KTP (2 lembar)',
          'Fotokopi KK (1 lembar)',
          'Pas foto 3x4 (2 lembar)',
          'Surat pengantar dari RT/RW'
        ])
      },
      {
        id: '2',
        title: 'LALU LINTAS',
        slug: 'lalu-lintas',
        description: 'Layanan pembuatan dan perpanjangan surat-surat kendaraan bermotor',
        category: 'Lalu Lintas',
        estimatedTime: '2-3 hari kerja',
        iconUrl: '🚗',
        linkType: 'INTERNAL',
        linkUrl: '/layanan/lalu-lintas',
        status: 'ACTIVE',
        requirements: JSON.stringify([
          'Fotokopi KTP (2 lembar)',
          'Fotokopi SIM (jika ada)',
          'Fotokopi STNK (jika ada)',
          'BPKB asli (jika perlu)',
          'Surat Bebas Narkoba (untuk SIM baru)'
        ])
      },
      {
        id: '3',
        title: 'SKCK',
        slug: 'skck',
        description: 'Surat Keterangan Catatan Kriminal - Layanan resmi dari POLRI untuk keperluan melamar kerja, pendidikan, atau lainnya',
        category: 'Pelayanan Kepolisian',
        estimatedTime: 'Online',
        iconUrl: '🔍',
        linkType: 'EXTERNAL',
        linkUrl: 'https://skck.polri.go.id/',
        isNewTab: true,
        status: 'ACTIVE',
        requirements: JSON.stringify([
          'KTP elektronik (e-KTP)',
          'Akun SKCK Online',
          'Pas foto terbaru',
          'Email aktif',
          'Nomor HP aktif'
        ])
      }
    ]

    for (const service of services) {
      await prisma.service.upsert({
        where: { id: service.id },
        update: service,
        create: service
      })
    }

    console.log('✅ Services created successfully')
  } catch (error) {
    console.error('❌ Error creating services:', error)
    throw error
  }
}

export async function seedUsers() {
  try {
    console.log('🔄 Creating users...')

    const users = [
      {
        id: '1',
        name: 'Admin Polres Wonosobo',
        email: 'admin@wonosobo.polri.go.id',
        role: 'ADMIN',
        password: '$2b$10$rOzJqQjQjQjQjQjQjQjQjOzJqQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQ' // admin123
      },
      {
        id: '2',
        name: 'Fathur Rahman',
        email: 'fathurz1507@gmail.com',
        role: 'ADMIN',
        password: '$2b$10$rOzJqQjQjQjQjQjQjQjQjOzJqQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQ' // admin123
      },
      {
        id: '3',
        name: 'Budi Santoso',
        email: 'budi.santoso@example.com',
        role: 'USER',
        password: '$2b$10$rOzJqQjQjQjQjQjQjQjQjOzJqQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQ' // user123
      },
      {
        id: '4',
        name: 'Siti Nurhaliza',
        email: 'siti.nurhaliza@example.com',
        role: 'USER',
        password: '$2b$10$rOzJqQjQjQjQjQjQjQjQjOzJqQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQ' // user123
      },
      {
        id: '5',
        name: 'Ahmad Fauzi',
        email: 'ahmad.fauzi@example.com',
        role: 'USER',
        password: '$2b$10$rOzJqQjQjQjQjQjQjQjQjOzJqQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQ' // user123
      }
    ]

    for (const user of users) {
      await prisma.user.upsert({
        where: { id: user.id },
        update: user,
        create: user
      })
    }

    console.log('✅ Users created successfully')
  } catch (error) {
    console.error('❌ Error creating users:', error)
    throw error
  }
}

export async function seedServiceRequests() {
  try {
    console.log('🔄 Creating service requests...')

    const serviceRequests = [
      {
        id: '1',
        userId: '3',
        serviceId: '1',
        trackingNumber: 'SR-20241201-0001',
        status: 'COMPLETED',
        submissionData: JSON.stringify({
          nama: 'Budi Santoso',
          tempatLahir: 'Wonosobo',
          tanggalLahir: '1990-05-15',
          nik: '3307151505900001',
          alamat: 'Jl. Merapi No. 123, Wonosobo',
          pekerjaan: 'Swasta',
          keperluan: 'Pengajuan visa kerja ke luar negeri',
          polsek: 'Polsek Wonosobo',
          jenisSurat: 'SKCK'
        }),
        statusLog: JSON.stringify([
          { status: 'PENDING', timestamp: '2024-12-01T09:00:00Z', note: 'Pengajuan diterima' },
          { status: 'IN_PROGRESS', timestamp: '2024-12-01T10:00:00Z', note: 'Sedang diproses' },
          { status: 'COMPLETED', timestamp: '2024-12-01T14:00:00Z', note: 'Dokumen selesai' }
        ])
      },
      {
        id: '2',
        userId: '4',
        serviceId: '2',
        trackingNumber: 'SR-20241201-0002',
        status: 'PENDING',
        submissionData: JSON.stringify({
          nama: 'Siti Nurhaliza',
          tempatLahir: 'Yogyakarta',
          tanggalLahir: '1992-08-20',
          nik: '3307152008920002',
          alamat: 'Jl. Dieng No. 456, Wonosobo',
          noSim: '123456789012',
          noStnk: 'AB-1234-CD',
          jenisKendaraan: 'Motor',
          noPolisi: 'AB-1234-CD',
          keperluan: 'Perpanjangan SIM C yang akan habis masa berlakunya'
        }),
        statusLog: JSON.stringify([
          { status: 'PENDING', timestamp: '2024-12-01T11:00:00Z', note: 'Pengajuan diterima' }
        ])
      }
    ]

    for (const request of serviceRequests) {
      await prisma.serviceRequest.upsert({
        where: { id: request.id },
        update: request,
        create: request
      })
    }

    console.log('✅ Service requests created successfully')
  } catch (error) {
    console.error('❌ Error creating service requests:', error)
    throw error
  }
}

async function main() {
  try {
    console.log('🌱 Starting database seeding...')
    
    await seedServices()
    await seedUsers()
    await seedServiceRequests()
    await seedDocumentTemplates()
    
    console.log('✅ Database seeded successfully!')
  } catch (error) {
    console.error('❌ Error seeding database:', error)
    process.exit(1)
  } finally {
    await prisma.$disconnect()
  }
}

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