import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Meta } from './entities/meta.entity';

@Injectable()
export class MetasService {
  constructor(@InjectRepository(Meta) private repo: Repository<Meta>) {}

  async findAll(q: any) {
    const qb = this.repo.createQueryBuilder('m');
    if (q.tipo) qb.andWhere('m.tipo = :tipo', { tipo: q.tipo });
    if (q.status) qb.andWhere('m.status = :s', { s: q.status });
    if (q.centro_custo_id) qb.andWhere('m.centro_custo_id = :cc', { cc: q.centro_custo_id });
    return qb.orderBy('m.created_at', 'DESC').getMany();
  }

  async create(dto: any) { return this.repo.save(this.repo.create(dto)); }

  async update(id: string, dto: any) {
    await this.repo.update(id, dto);
    return this.repo.findOneBy({ id });
  }

  async progresso() {
    const all = await this.repo.find();
    const por_tipo = {} as any;
    for (const m of all) {
      if (!por_tipo[m.tipo]) por_tipo[m.tipo] = { total: 0, atingidas: 0, em_andamento: 0, atrasadas: 0 };
      por_tipo[m.tipo].total++;
      por_tipo[m.tipo][m.status]++;
    }
    const total = all.length;
    const atingidas = all.filter(m => m.status === 'atingida').length;
    return { total, atingidas, percentual_conclusao: total ? Math.round((atingidas / total) * 100) : 0, por_tipo, metas: all };
  }
}
