import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Questionario, RelatoriosService } from '../../services/relatorios.service';
import { RelatorioQuestionarioDTO } from '../../models/relatorio.model';
import { PdfService } from '../../services/pdf.service';

@Component({
  selector: 'app-relatorios',
  standalone: true,
  imports: [CommonModule, FormsModule],
  templateUrl: './relatorios.component.html',
  styleUrls: ['./relatorios.component.css']
})
export class RelatoriosComponent implements OnInit {

  dadosRelatorio: RelatorioQuestionarioDTO | null = null;
  isLoading: Boolean = false;

  relatorios: Questionario[] = [];
  relatoriosOriginais: Questionario[] = [];
  filtroTitulo: string = '';
  filtroDataPublicacao: string = '';
  filtroDataValidade: string = '';

  constructor(
    private relatoriosService: RelatoriosService,
    private pdfService: PdfService
  ) {}

  ngOnInit(): void {
    this.relatoriosService.listarQuestionarios().subscribe({
      next: (dados) => {
        this.relatoriosOriginais = dados;
        this.relatorios = dados;
      },
      error: (erro) => {
        console.error('Erro ao carregar questionários:', erro);
      }
    });
  }

  gerarRelatorio(relatorio: Questionario) {
    this.isLoading = true;
    this.relatoriosService.getRelatorioQuestionario(relatorio.id).subscribe({
      next: (dados) => {
        console.log(dados.tituloQuestionario);
        this.dadosRelatorio = dados;
        this.isLoading = false;
        if (this.dadosRelatorio) {
          console.log("gerando dados: "+ this.dadosRelatorio.tituloQuestionario);
          this.pdfService.gerarRelatorioPdf(this.dadosRelatorio);
        }else{
          alert('Dados do relatório não carregados.');
        }
      },
      error: (erro) => {
        console.error('Erro ao gerar relatório:', erro);
      }
    });
  }

filtrarRelatorios() {
  this.relatorios = this.relatoriosOriginais.filter(rel => {
    const tituloValido = rel.titulo?.toLowerCase().includes(this.filtroTitulo.toLowerCase());

    const dataPubValida = !this.filtroDataPublicacao || 
      (rel.dataPublicacao && new Date(rel.dataPublicacao) >= new Date(this.filtroDataPublicacao));

    const dataValidadeValida = !this.filtroDataValidade || 
      (rel.dataValidade && new Date(rel.dataValidade) <= new Date(this.filtroDataValidade));

    return tituloValido && dataPubValida && dataValidadeValida;
  });
}
}
