import { Injectable, BadRequestException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Fornecedor } from './entities/fornecedor.entity';
import { Certidao } from './entities/certidao.entity';

@Injectable()
export class FornecedoresService {
  constructor(
    @InjectRepository(Fornecedor) private repo: Repository<Fornecedor>,
    @InjectRepository(Certidao) private certRepo: Repository<Certidao>,
  ) {}

  findAll() { return this.repo.find({ where: { ativo: true }, relations: ['certidoes'] }); }
  findOne(id: string) { return this.repo.findOne({ where: { id }, relations: ['certidoes'] }); }
  create(data: Partial<Fornecedor>) { return this.repo.save(data); }
  async update(id: string, data: Partial<Fornecedor>) { await this.repo.update(id, data); return this.findOne(id); }
  
  async remove(id: string) {
    // Check for associated OS via direct query
    const result = await this.repo.query('SELECT COUNT(*) as count FROM ordens_servico WHERE fornecedor_id = $1', [id]);
    const count = parseInt(result[0]?.count || '0');
    if (count > 0) {
      throw new BadRequestException('Não é possível excluir este fornecedor pois existem Ordens de Serviço associadas.');
    }
    await this.repo.update(id, { ativo: false });
  }

  findCertidoes(fornecedorId: string) { return this.certRepo.find({ where: { fornecedor_id: fornecedorId } }); }
  createCertidao(data: Partial<Certidao>) { return this.certRepo.save(data); }
}
