import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Coupon } from '../coupons/coupon.entity';

@Injectable()
export class CouponsSeed {
  constructor(
    @InjectRepository(Coupon)
    private couponsRepository: Repository<Coupon>,
  ) {}

  async runSeed() {
    await this.couponsRepository.clear();
    const referencias = [
      'DESCONTO10', 'FRETEGRATIS2024', 'COMPRE1GANHE1', 'BLACKFRIDAY50',
      'CYBERMONDAY30', 'BOASVINDAS2024', 'PROMOCAOPRIMAVERA', 'VERAOSALE25',
      'INVERNO20', 'ANONOVO50', 'FERIADOPROMO20', 'FLASHSALE10',
      'CLIENTEVIP', 'OFERTALIMITADA', 'MEMBROSSOMENTE', 'LIQUIDACAO'
    ];

    const descricoes = [
      'Desconto de 10% em todos os produtos!',
      'Frete grátis para sua compra!',
      'Compre 1 e ganhe 1 grátis em itens selecionados',
      '50% de desconto durante a Black Friday!',
      '30% de desconto nas promoções da Cyber Monday',
      'Desconto de boas-vindas para novos clientes!',
      '25% de desconto durante a promoção de verão!',
      'Ofertas especiais para a temporada de inverno!',
      'Desconto limitado de Ano Novo!',
      '20% de desconto em itens de feriado!',
      'Promoção relâmpago! 10% de desconto em tudo!',
      'Oferta exclusiva para clientes VIP!',
      'Liquidação: até 50% de desconto!'
    ];

    const produtosArray = [
      ['Produto A', 'Produto B'],
      ['Produto C', 'Produto D', 'Produto E'],
      ['Produto F', 'Produto G'],
      ['Produto H', 'Produto I', 'Produto J'],
      ['Produto K', 'Produto L', 'Produto M'],
      ['Produto N', 'Produto O'],
      ['Produto P', 'Produto Q'],
      ['Produto R', 'Produto S', 'Produto T'],
    ];

    const datasExpiracao = [
      new Date('2024-12-31'),
      new Date('2024-06-30'),
      new Date('2024-08-15'),
      new Date('2024-11-25'),
    ];

    const imagens = [
      'imagem1.jpg', 'imagem2.jpg', 'imagem3.jpg', 'imagem4.jpg',
      'imagem5.jpg', 'imagem6.jpg', 'imagem7.jpg', 'imagem8.jpg',
      'imagem9.jpg', 'imagem10.jpg', 'imagem11.jpg', 'imagem12.jpg',
      'imagem13.jpg', 'imagem14.jpg', 'imagem15.jpg', 'imagem16.jpg',
    ];

    const enderecos = [
      'Rua dos Bobos, 0, São Paulo, SP',
      'Av. Paulista, 1578, São Paulo, SP',
      'Praça da Sé, 123, São Paulo, SP',
      'Av. Atlântica, 1702, Rio de Janeiro, RJ',
      'Rua XV de Novembro, 45, Curitiba, PR',
      'Av. Beira Mar, 982, Fortaleza, CE',
      'Av. Afonso Pena, 955, Belo Horizonte, MG',
      'Praça Mauá, 19, Rio de Janeiro, RJ',
      'Av. Ipiranga, 50, Porto Alegre, RS',
      'Av. Independência, 820, Porto Alegre, RS',
      'Rua Amazonas, 200, Manaus, AM',
      'Av. Getúlio Vargas, 530, Salvador, BA',
      'Av. Rio Branco, 99, Brasília, DF',
      'Av. Goiás, 1120, Goiânia, GO',
      'Av. Amazonas, 830, Recife, PE',
      'Av. Boa Viagem, 1400, Recife, PE'
    ];
    
    const tiposDesconto = ['percentual', 'fixo'];

    for (let i = 0; i < 16; i++) {
      const couponData: Partial<Coupon> = {
        reference: referencias[i % referencias.length],
        description: descricoes[i % descricoes.length],
        //company: "Empresa " + i,
        usageLimit: Math.floor(Math.random() * 500) + 50,
        expirationDate: datasExpiracao[i % datasExpiracao.length],
        conditions: 'Válido para pedidos acima de R$100',
        products: produtosArray[i % produtosArray.length],
        imageName: imagens[i],
        isActive: i % 2 === 0,
        discountType: tiposDesconto[i % tiposDesconto.length] === 'percentual' ? 'percentage' : 'fixed',
        value: (Math.floor(Math.random() * 5) + 1) * 5,
        address: enderecos[i % enderecos.length],
      };

      const coupon = this.couponsRepository.create(couponData);
      await this.couponsRepository.save(coupon);
    }

    console.log('Seed de cupons executado com sucesso!');
  }
}