import { DataSource } from 'typeorm';

interface CurrencySeed {
  code: string;
  name: string;
  symbol: string;
  decimalPlaces: number;
  isActive: boolean;
  isDefault: boolean;
  exchangeRate: number; // Rate against USD
}

export const currenciesSeed = async (dataSource: DataSource): Promise<void> => {
  const queryRunner = dataSource.createQueryRunner();
  await queryRunner.connect();

  const currencies: CurrencySeed[] = [
    { code: 'USD', name: 'US Dollar', symbol: '$', decimalPlaces: 2, isActive: true, isDefault: true, exchangeRate: 1.0 },
    { code: 'EUR', name: 'Euro', symbol: '€', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 0.85 },
    { code: 'GBP', name: 'British Pound', symbol: '£', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 0.73 },
    { code: 'CAD', name: 'Canadian Dollar', symbol: 'C$', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 1.25 },
    { code: 'AUD', name: 'Australian Dollar', symbol: 'A$', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 1.35 },
    { code: 'JPY', name: 'Japanese Yen', symbol: '¥', decimalPlaces: 0, isActive: true, isDefault: false, exchangeRate: 110.0 },
    { code: 'CNY', name: 'Chinese Yuan', symbol: '¥', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 6.45 },
    { code: 'INR', name: 'Indian Rupee', symbol: '₹', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 74.5 },
    { code: 'BRL', name: 'Brazilian Real', symbol: 'R$', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 5.25 },
    { code: 'MXN', name: 'Mexican Peso', symbol: '$', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 20.0 },
    { code: 'NGN', name: 'Nigerian Naira', symbol: '₦', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 410.0 },
    { code: 'ZAR', name: 'South African Rand', symbol: 'R', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 14.5 },
    { code: 'AED', name: 'UAE Dirham', symbol: 'د.إ', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 3.67 },
    { code: 'SAR', name: 'Saudi Riyal', symbol: '﷼', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 3.75 },
    { code: 'CHF', name: 'Swiss Franc', symbol: 'Fr', decimalPlaces: 2, isActive: true, isDefault: false, exchangeRate: 0.92 },
  ];

  for (const currency of currencies) {
    const exists = await queryRunner.query(
      'SELECT code FROM currencies WHERE code = $1',
      [currency.code],
    );

    if (exists.length === 0) {
      await queryRunner.query(
        `INSERT INTO currencies (code, name, symbol, decimal_places, is_active, is_default, exchange_rate, created_at)
         VALUES ($1, $2, $3, $4, $5, $6, $7, NOW())`,
        [currency.code, currency.name, currency.symbol, currency.decimalPlaces, currency.isActive, currency.isDefault, currency.exchangeRate],
      );
    }
  }

  await queryRunner.release();
  console.log(`Seeded ${currencies.length} currencies`);
};