import { PrismaClient } from '@prisma/client'
import bcrypt from 'bcryptjs'

const prisma = new PrismaClient()

// Список базовых категорий товаров
const DEFAULT_CATEGORIES = [
  'Одежда и обувь',
  'Косметика и парфюмерия', 
  'Дом и сад',
  'Детские товары',
  'Спорт и отдых',
  'Электроника',
  'Книги',
  'Здоровье',
  'Автотовары',
  'Строительство и ремонт',
  'Продукты питания',
  'Зоотовары',
  'Дача, сад и огород',
  'Канцелярские товары',
  'Хобби и творчество',
  'Украшения и аксессуары',
  'Сумки и чемоданы',
  'Техника для дома',
  'Музыкальные инструменты',
  'Игры и игрушки'
]

async function seedAdmin() {
  try {
    console.log('🔐 Создание администратора...')

    // Проверяем есть ли уже админ
    const existingAdmin = await prisma.admin.findUnique({
      where: { username: 'admin' }
    })

    if (existingAdmin) {
      console.log('ℹ️  Администратор уже существует, пропускаем создание')
      return existingAdmin
    }

    // Генерируем хеш пароля
    const password = 'admin123' // Временный пароль
    const hashedPassword = await bcrypt.hash(password, 12)

    // Создаем администратора
    const admin = await prisma.admin.create({
      data: {
        username: 'admin',
        password: hashedPassword,
        email: 'admin@sferav.com',
        isActive: true
      }
    })

    console.log('✅ Администратор создан:')
    console.log(`   Логин: ${admin.username}`)
    console.log(`   Пароль: ${password}`)
    console.log(`   Email: ${admin.email}`)
    console.log('   ⚠️  Обязательно смените пароль после первого входа!')

    return admin
  } catch (error) {
    console.error('❌ Ошибка создания администратора:', error)
    throw error
  }
}

async function seedCategories() {
  try {
    console.log('\n📂 Создание категорий...')

    let createdCount = 0
    let skippedCount = 0

    for (const categoryName of DEFAULT_CATEGORIES) {
      try {
        // Проверяем существует ли категория
        const existingCategory = await prisma.category.findUnique({
          where: { name: categoryName }
        })

        if (existingCategory) {
          skippedCount++
          continue
        }

        // Создаем категорию
        await prisma.category.create({
          data: {
            name: categoryName
          }
        })

        createdCount++
        console.log(`   ✅ Создана категория: ${categoryName}`)
      } catch (error) {
        console.log(`   ⚠️  Ошибка создания категории "${categoryName}":`, error.message)
      }
    }

    console.log(`\n📊 Результат создания категорий:`)
    console.log(`   Создано: ${createdCount}`)
    console.log(`   Пропущено (уже существует): ${skippedCount}`)
    console.log(`   Всего категорий: ${DEFAULT_CATEGORIES.length}`)

    return { createdCount, skippedCount, total: DEFAULT_CATEGORIES.length }
  } catch (error) {
    console.error('❌ Ошибка создания категорий:', error)
    throw error
  }
}

async function main() {
  try {
    console.log('🚀 Запуск инициализации базы данных...\n')

    // Создаем админа
    await seedAdmin()

    // Создаем категории
    await seedCategories()

    console.log('\n🎉 Инициализация базы данных завершена успешно!')

  } catch (error) {
    console.error('\n💥 Ошибка инициализации базы данных:', error)
    process.exit(1)
  } finally {
    await prisma.$disconnect()
  }
}

// Запускаем если скрипт вызван напрямую
if (import.meta.url === `file://${process.argv[1]}`) {
  main()
}

export { seedAdmin, seedCategories } 