import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import { DashboardService } from '../../services/dashboard.service';
import { Color, ScaleType } from '@swimlane/ngx-charts';
import { FormsModule } from '@angular/forms';

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

  climaPorSetor: { name: string, value: number }[] = [];
  quantidadePorNota: { name: string, value: number }[] = [];
  percentualNegativoPorSetor: { name: string, value: number }[] = [];
  percentualRespondentesPorSetor: { name: string, value: number }[] = [];

  view: [number, number] = [600, 300];

  // Filtro de período
  periodoSelecionado = 'todos';
  dataDesde: string | null = null;
  dataInicial: string | null = null;
  dataFinal: string | null = null;

  colorScheme: Color = {
    name: 'colorScheme',
    selectable: true,
    group: ScaleType.Ordinal,
    domain: ['#6c757d']
  };

  constructor(private dashboardService: DashboardService) {}

  ngOnInit(): void {
    this.aplicarFiltro();
  }

  aplicarFiltro() {
    const hoje = new Date();
    if (this.periodoSelecionado === 'semana') {
      const data = new Date();
      data.setDate(hoje.getDate() - 7);
      this.dataInicial = data.toISOString();
      this.dataFinal = hoje.toISOString();
    } else if (this.periodoSelecionado === 'mes') {
      const data = new Date();
      data.setMonth(hoje.getMonth() - 1);
      this.dataInicial = data.toISOString();
      this.dataFinal = hoje.toISOString();
    } else if (this.periodoSelecionado === 'hoje') {
      const data = new Date();
      data.setHours(0, 0, 0, 0);
      this.dataInicial = data.toISOString();
      this.dataFinal = hoje.toISOString();
    } else if (this.periodoSelecionado === 'desde' && this.dataDesde) {
      const data = new Date(this.dataDesde);
      this.dataInicial = data.toISOString();
      this.dataFinal = null;
    } else {
      this.dataInicial = null;
      this.dataFinal = null;
    }

    // Carregar todos os gráficos com o filtro aplicado
    this.carregarMediaPorSetor();
    this.carregarPercentualPorNota();
    this.carregarPercentualNegativoPorSetor();
    this.carregarPercentualRespondentesPorSetor();
  }

  carregarMediaPorSetor() {
    this.dashboardService.obterMediaPorSetor(this.dataInicial, this.dataFinal).subscribe({
      next: (dados: any[]) => {
        this.climaPorSetor = dados.map(item => ({
          name: item.setor,
          value: +item.mediaNivelHumor
        }));
      },
      error: (erro) => {
        console.error('Erro ao carregar média por setor:', erro);
      }
    });
  }

  carregarPercentualPorNota() {
    this.dashboardService.obterPercentualPorNota(this.dataInicial, this.dataFinal).subscribe({
      next: (dados: any[]) => {
        this.quantidadePorNota = dados.map(item => ({
          name: item.nota,
          value: +item.quantidade
        }));
      },
      error: (erro) => {
        console.error('Erro ao carregar percentual por nota:', erro);
      }
    });
  }

  carregarPercentualNegativoPorSetor() {
    this.dashboardService.obterPercentualNegativoPorSetor(this.dataInicial, this.dataFinal).subscribe({
      next: (dados: any[]) => {
        this.percentualNegativoPorSetor = dados.map(item => ({
          name: item.setor,
          value: +item.percentual
        }));
      },
      error: (erro) => {
        console.error('Erro ao carregar percentual negativo por setor:', erro);
      }
    });
  }

  carregarPercentualRespondentesPorSetor() {
    this.dashboardService.obterPercentualRespondentesPorSetor(this.dataInicial, this.dataFinal).subscribe({
      next: (dados: any[]) => {
        this.percentualRespondentesPorSetor = dados.map(item => ({
          name: item.setor,
          value: +item.percentual
        }));
      },
      error: (erro) => {
        console.error('Erro ao carregar percentual de respondentes por setor:', erro);
      }
    });
  }
}