import { Injectable } from '@angular/core';
import pdfMake from 'pdfmake/build/pdfmake';
import pdfFonts from 'pdfmake/build/vfs_fonts';
import { TDocumentDefinitions } from 'pdfmake/interfaces';

pdfMake.vfs = pdfFonts.vfs;

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

  constructor() { }

  /**
   * Genera un PDF con la definición por defecto para cronogramas
   * @param data Datos opcionales para personalizar el documento
   * @returns Promise con la URL de datos del PDF generado
   */
  generateCronogramaPdf(data?: any): Promise<string> {
    const docDefinition = this.getCronogramaDocDefinition(data);
    return this.generatePdfDataUrl(docDefinition);
  }

  /**
   * Descarga un PDF con la definición de cronograma
   * @param filename Nombre del archivo a descargar
   * @param data Datos opcionales para personalizar el documento
   */
  downloadCronogramaPdf(filename: string = 'cronograma', data?: any): void {
    const docDefinition = this.getCronogramaDocDefinition(data);
    pdfMake.createPdf(docDefinition).download(filename);
  }

  /**
   * Genera una URL de datos a partir de la definición del documento
   * @param docDefinition Definición del documento PDF
   * @returns Promise con la URL de datos del PDF
   */
  private generatePdfDataUrl(docDefinition: TDocumentDefinitions): Promise<string> {
    return new Promise((resolve) => {
      const pdfDocGenerator = pdfMake.createPdf(docDefinition);
      pdfDocGenerator.getDataUrl((dataUrl) => {
        resolve(dataUrl);
      });
    });
  }

  /**
   * Obtiene la definición del documento para un cronograma
   * @param data Datos opcionales para personalizar el documento
   * @returns Definición del documento PDF
   */
  private getCronogramaDocDefinition(data?: any): TDocumentDefinitions {
    return {
      content: [
        // Encabezado con información de empresa y cronograma
        {
          columns: [
            {
              width: '50%',
              text: 'Empresa: Constructora Los Andes S.A.',
              margin: [0, 0, 0, 5]
            },
            {
              width: '50%',
              text: [
                { text: 'Cronograma:      SC-23-45\n' },
                { text: 'Nombre sistema: Terminal Portuario Norte' }
              ],
              alignment: 'right',
              margin: [0, 0, 0, 5]
            }
          ]
        },

        // Título y subtítulo
        {
          text: 'CRONOGRAMA BASE DE OBRAS E INVERSIONES',
          alignment: 'center',
          bold: true,
          fontSize: 12,
          margin: [0, 10, 0, 0]
        },
        {
          text: 'ACTUALIZACIÓN PLAN DE DESARROLLO O NUEVA CONCESIÓN',
          alignment: 'center',
          bold: true,
          fontSize: 11,
          margin: [0, 0, 0, 10]
        },

        // Tabla principal
        {
          table: {
            headerRows: 1,
            widths: ['10%', '12%', '23%', '12%', '10%', '10%', '10%', '13%'],
            body: [
              [
                { text: 'ETAPA', style: 'tableHeader', alignment: 'center' },
                { text: 'CÓDIGO GLOSA', style: 'tableHeader', alignment: 'center' },
                { text: 'DESCRIPCIÓN GLOSA', style: 'tableHeader', alignment: 'center' },
                { text: 'MONTO INVERSIÓN UF', style: 'tableHeader', alignment: 'center' },
                { text: 'AÑO INICIO', style: 'tableHeader', alignment: 'center' },
                { text: 'AÑO TERMINO', style: 'tableHeader', alignment: 'center' },
                { text: 'MES TERMINO', style: 'tableHeader', alignment: 'center' },
                { text: 'NOTA', style: 'tableHeader', alignment: 'center' }
              ],
              [
                { text: '1', alignment: 'center' },
                { text: 'INF-001', alignment: 'center' },
                { text: 'Estudios preliminares', alignment: 'left' },
                { text: '2,500', alignment: 'right' },
                { text: '2025', alignment: 'center' },
                { text: '2025', alignment: 'center' },
                { text: 'Julio', alignment: 'center' },
                { text: 'Fase inicial', alignment: 'left' }
              ],
              [
                { text: '2', alignment: 'center' },
                { text: 'MOV-102', alignment: 'center' },
                { text: 'Movimiento de tierras', alignment: 'left' },
                { text: '15,750', alignment: 'right' },
                { text: '2025', alignment: 'center' },
                { text: '2026', alignment: 'center' },
                { text: 'Enero', alignment: 'center' },
                { text: 'En terreno', alignment: 'left' }
              ],
              [
                { text: '3', alignment: 'center' },
                { text: 'CIM-203', alignment: 'center' },
                { text: 'Construcción de cimientos', alignment: 'left' },
                { text: '32,800', alignment: 'right' },
                { text: '2026', alignment: 'center' },
                { text: '2026', alignment: 'center' },
                { text: 'Mayo', alignment: 'center' },
                { text: 'Crítico', alignment: 'left' }
              ],
              [
                { text: '4', alignment: 'center' },
                { text: 'EST-304', alignment: 'center' },
                { text: 'Estructura principal', alignment: 'left' },
                { text: '65,420', alignment: 'right' },
                { text: '2026', alignment: 'center' },
                { text: '2027', alignment: 'center' },
                { text: 'Febrero', alignment: 'center' },
                { text: 'Alta inversión', alignment: 'left' }
              ],
              [
                { text: '5', alignment: 'center' },
                { text: 'TER-405', alignment: 'center' },
                { text: 'Terminaciones y acabados', alignment: 'left' },
                { text: '18,300', alignment: 'right' },
                { text: '2027', alignment: 'center' },
                { text: '2027', alignment: 'center' },
                { text: 'Octubre', alignment: 'center' },
                { text: 'Etapa final', alignment: 'left' }
              ]
            ]
          }
        },

        // Total
        {
          columns: [
            {
              width: '80%',
              text: 'TOTAL:',
              alignment: 'right',
              bold: true,
              margin: [0, 15, 10, 20]
            },
            {
              width: '20%',
              text: '134,770 UF',
              alignment: 'left',
              bold: true,
              margin: [0, 15, 0, 20]
            }
          ]
        },

        // Firma
        {
          text: 'X',
          alignment: 'center',
          bold: true,
          fontSize: 14,
          margin: [0, 15, 0, 0]
        },
        {
          text: 'Firma SSS',
          alignment: 'center',
          fontSize: 10,
          margin: [0, 0, 0, 10]
        }
      ],

      // Estilos
      styles: {
        tableHeader: {
          bold: true,
          fontSize: 10,
          fillColor: '#f2f2f2'
        }
      },

      // Definiciones de página
      pageSize: 'A4',
      pageOrientation: 'portrait',
      pageMargins: [40, 40, 40, 40]
    };
  }
}