import { Injectable } from '@angular/core';
import { environments } from "../../../../environments/environments";
import { HttpClient, HttpHeaders } from '@angular/common/http';
import Swal from 'sweetalert2';
import * as XLSX from 'xlsx';


@Injectable({
  providedIn: 'root'
})
export class ExportExcellService {

private URL: string = environments.baseUrl;

  constructor(private http: HttpClient) { }

  private getHeaders(): HttpHeaders {
    const token = localStorage.getItem('token') || '';
    return new HttpHeaders({
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    });
  }



 exportAll(tabla: string) {
  const url = `${this.URL}/exportar-excel?tabla=${tabla}`;
  this.http.get(url, { responseType: 'blob', withCredentials: true }).subscribe({
    next: (blob) => {

      if (blob.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
        blob.text().then(texto => {
          console.error( texto);
          Swal.fire('Error', 'El servidor devolvió un error en lugar del Excel', 'error');
        });
        return;
      }

      this.descargarArchivo(blob, `${this.nombreArchivo(tabla)}.xlsx`);
    },
    error: (error) => this.manejarError(error)
  });
}

exportAlumnos() {
  const url = `${this.URL}/exportar-alumnos`;
  this.http.get(url, { responseType: 'blob', withCredentials: true }).subscribe({
    next: (blob) => {
      const a = document.createElement('a');
      const objectUrl = URL.createObjectURL(blob);
      a.href = objectUrl;
      a.download = "Alumnos_Registro.xlsx";
      a.click();
      URL.revokeObjectURL(objectUrl);
    },
    error: (error) => console.error(error)
  });
}


  private nombreArchivo(tabla: string): string {
    switch (tabla) {
      case 'niveles': return 'Niveles_Educativos';
      case 'materias_categorias': return 'Categorias_Materias';
      case 'materias': return 'Materias';
      case 'grados': return 'vista_grados_niveles';
      case 'grupos': return 'Grupos';
      case 'usuarios': return 'Usuarios';
      case 'tipos_tareas': return 'Tipos_Tareas';
    case 'periodos': return 'periodos';

      default: return 'Reporte';
    }
  }

  private descargarArchivo(blob: Blob, nombre: string) {
    const a = document.createElement('a');
    const objectUrl = URL.createObjectURL(blob);
    a.href = objectUrl;
    a.download = nombre;
    a.click();
    URL.revokeObjectURL(objectUrl);
  }

  private manejarError(error: any) {
    if (error.error?.text) {
      error.error.text().then((errorMessage: string) => {
        Swal.fire('Error', `Error backend: ${errorMessage}`, 'error');
      });
    } else {
      Swal.fire('Error', 'Error desconocido en la descarga', 'error');
    }
  }

  exportJsonToExcel(datos: any[], nombreArchivo: string) {
  const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(datos);

  const workbook: XLSX.WorkBook = XLSX.utils.book_new();

  let sheetName = nombreArchivo.substring(0, 31);
  XLSX.utils.book_append_sheet(workbook, worksheet, sheetName);

  XLSX.writeFile(workbook, `${nombreArchivo}.xlsx`);
}

    getConsultarRegistro(){
       return  this.http.get(`${this.URL}/alumnosRegistro`, { headers: this.getHeaders() });
    }
}



