import 'dotenv/config'
import { PrismaClient } from '@prisma/client'
import { PrismaMariaDb } from '@prisma/adapter-mariadb'
import bcrypt from 'bcryptjs'

// Seed production : crée uniquement le compte admin.
// Usage : npm run db:seed:prod

function parseMysqlUrl(url: string) {
  const match = url.match(/^mysql:\/\/([^:]+):(.+)@([^:]+):(\d+)\/(.+)$/)
  if (!match) throw new Error(`Invalid MySQL URL: ${url}`)
  return {
    user: match[1],
    password: match[2],
    host: match[3],
    port: parseInt(match[4]),
    database: match[5],
  }
}

const config = parseMysqlUrl(process.env.DATABASE_URL!)
const adapter = new PrismaMariaDb(config)
const prisma = new PrismaClient({ adapter })

async function main() {
  console.log('🌱 Seed production...')

  const adminPassword = await bcrypt.hash('admin123', 10)

  const admin = await prisma.user.upsert({
    where: { email: 'gillecamille@gmail.com' },
    update: { password: adminPassword, role: 'admin', mustChangePassword: true },
    create: {
      email: 'gillecamille@gmail.com',
      name: 'Camille',
      password: adminPassword,
      role: 'admin',
      mustChangePassword: true,
    },
  })

  console.log('✅ Admin créé :', admin.email)
  console.log('')
  console.log('⚠️  Pense à changer le mot de passe après la première connexion !')
  console.log('   Email    : gillecamille@gmail.com')
  console.log('   Mot de passe : admin123')
}

main()
  .catch((e) => {
    console.error(e)
    process.exit(1)
  })
  .finally(async () => {
    await prisma.$disconnect()
  })
