import { Component, Inject, OnInit } from "@angular/core";
import { EnviarInfoService } from "../../../Administrador/services/enviar-info.service";
import { AbstractControl, FormBuilder, FormControl, FormGroup, ReactiveFormsModule, ValidationErrors, Validators,FormArray } from "@angular/forms";
import { MAT_DATE_LOCALE, MatOption, provideNativeDateAdapter } from "@angular/material/core";
import { RegistroAcademicoService } from "../../services/registroAcademico.service";
import Swal from "sweetalert2";
import { ActivatedRoute, Router } from "@angular/router";
import { MAT_DIALOG_DATA, MatDialog, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogModule, MatDialogRef, MatDialogTitle } from "@angular/material/dialog";
import { MatFormFieldModule } from "@angular/material/form-field";
import { MatInputModule } from "@angular/material/input";
import { MatButtonModule } from "@angular/material/button";
import { MatIcon } from "@angular/material/icon";
import { CommonModule } from "@angular/common";
import { MatSelectModule } from "@angular/material/select";
import { GradosEducativosService } from "../../../Administrador/services/grados-educativos.service";
import { BreakpointObserver } from "@angular/cdk/layout";
import { map } from 'rxjs/operators';
import { UsersService } from "../../../Administrador/services/users.service";



@Component({
    selector: 'app-registro',
    templateUrl: './registro.component.html',
    styleUrls: ['./registro.component.css'],
    providers: [provideNativeDateAdapter(),
    { provide: MAT_DATE_LOCALE, useValue: 'en-GB' }
    ],
})

export class registroComponent implements OnInit {
    color: string = '';


    Padre = JSON.parse(localStorage.getItem('userDataS') ? localStorage.getItem('userDataS') || '' : localStorage.getItem('userData') || '');
    textColor: string = '';
    dia: number = 0;
    mes: number = 0;
    año: number = 0;

    form = this.fb.group({
        idAlumno: [''],
        primerNombre: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        segundoNombre: [null, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        apellidoPaterno: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        apellidoMaterno: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        curp: ['', [Validators.pattern('^[A-Z]{1}[A-Z]{3}[0-9]{6}[HM]{1}[A-Z]{5}[A-Z0-9]{2}$')]],
        sexo: [''],
        edad: [''],
        ciudadNacimiento: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        estado: [''],
        fechaNacimiento: ['', [this.validateFechaNacimiento]],
        diaNacimiento: [this.dia],
        mesNacimiento: [this.mes],
        añoNacimiento: [this.año],
        domicilio: [''],
        telefonoCasa: ['', [Validators.pattern('^[0-9]{10}$')]],
        institucionProcedencia: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        motivoCambio: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
    });

    validateFechaNacimiento(control: AbstractControl): ValidationErrors | null {
        const fechaNacimiento = new Date(control.value);
        const fechaMaxima = new Date();
        const fechaMinima = new Date();
        fechaMaxima.setFullYear(fechaMaxima.getFullYear() - 1);
        fechaMinima.setFullYear(fechaMinima.getFullYear() - 20);
        const yearNacimiento = fechaNacimiento.getFullYear();
        const yearMaxima = fechaMaxima.getFullYear();
        const yearMinima = fechaMinima.getFullYear();
        if (yearNacimiento > yearMaxima || yearNacimiento < yearMinima) {
            return { fechaInvalida: true };
        }
        return null;
    }
    validateFechaNacimiento1(control: AbstractControl): ValidationErrors | null {
        const fechaNacimiento = new Date(control.value);
        const fechaMaxima = new Date();
        fechaMaxima.setFullYear(fechaMaxima.getFullYear() - 1);
        const yearNacimiento = fechaNacimiento.getFullYear();
        const yearMaxima = fechaMaxima.getFullYear();
        if (yearNacimiento > yearMaxima) {
            return { fechaInvalida: true };
        }
        return null;
    }

    form2 = this.fb.group({
        padrePrimerNombre: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
padreSegundoNombre: [null, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        padreApellidoPaterno: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        padreApellidoMaterno: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        padreCurp: ['', [Validators.pattern('^[A-Z]{1}[A-Z]{3}[0-9]{6}[HM]{1}[A-Z]{5}[A-Z0-9]{2}$')]],
        padreNacionalidad: [''],
        padreEstadoCivil: [''],
        padreFechaNacimiento: ['', [this.validateFechaNacimiento1]],
        padreDiaNacimiento: [this.dia],
        padreMesNacimiento: [this.mes],
        padreAñoNacimiento: [this.año],
        padreDomicilio: [''],
        padreCPDomicilio: ['', [Validators.pattern('^[0-9]{5}$')]],
        padreEscolaridad: [''],
        padreOcupacion: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        padreLugarTrabajo: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        padreTelefonoTrabajo: ['', [Validators.pattern('^[0-9]{10}$')]],
        padreExtension: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        padreCelular: ['', [Validators.pattern('^[0-9]{10}$')]],
        padreCorreo: ['', [Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$')]],
    });

    form3 = this.fb.group({
        madrePrimerNombre: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        madreSegundoNombre: [null, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        madreApellidoPaterno: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        madreApellidoMaterno: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        madreCurp: ['', [Validators.pattern('^[A-Z]{1}[A-Z]{3}[0-9]{6}[HM]{1}[A-Z]{5}[A-Z0-9]{2}$')]],
        madreNacionalidad: [''],
        madreEstadoCivil: [''],
        madreFechaNacimiento: ['', [this.validateFechaNacimiento1]],
        madreDiaNacimiento: [this.dia],
        madreMesNacimiento: [this.mes],
        madreAñoNacimiento: [this.año],
        madreDomicilio: [''],
        madreCPDomicilio: ['', [Validators.pattern('^[0-9]{5}$')]],
        madreEscolaridad: [''],
        madreOcupacion: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        madreLugarTrabajo: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        madreTelefonoTrabajo: ['', [Validators.pattern('^[0-9]{10}$')]],
        madreExtension: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        madreCelular: ['', [Validators.pattern('^[0-9]{10}$')]],
        madreCorreo: ['', [Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$')]],
    });

form4 = this.fb.group({
    PadreFam: ['', Validators.required],
    MadreFam: ['', Validators.required],
    AutorizarAlum: ['', Validators.required],
    personasAutorizadas: this.fb.array([])
});

    form5 = this.fb.group({
        tipoSangre: [''],
        aspirina: [''],
        penicilina: [''],
        otrosMedicamentos: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        paperas: [''],
        sarampion: [''],
        rubeola: [''],
        escarlatina: [''],
        tosferina: [''],
        tifoidea: [''],
        hepatitis: [''],
        varicela: [''],
        bronquitis: [''],
        apendicitis: [''],
        meninguitis: [''],
        desmayos: [''],
        covid: [''],
        garganta: [''],
        estomago: [''],
        catarro: [''],
        diarrea: [''],
        dolorCabeza: [''],
        fiebreAlta: [''],
        comezonFrecuente: [''],
        mareos: [''],
        diabetes: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        asmatico: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        epileptico: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        enfermedadPiel: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
    });

    form6 = this.fb.group({
        problemasEmbarazo: [''],
        problemasParto: [''],
        peso: ['', [Validators.pattern('^[0-9]{1}(\\.[0-9]{1,3})?$')]],
        pesoActual: ['', [Validators.pattern('^[0-9]{1,3}(\\.[0-9]{1,3})?$')]],
        talla1: ['', [Validators.pattern('^[0-9]{1,2}$')]],
        tallaActual: ['', [Validators.pattern('^[0-9]{1,2}(\\.[0-9]{1,2})?$')]],
        edad1: [''],
        edad2: [''],
        gateo: [''],
        edadGateo: [''],
        edadHablo: [''],
        edadCamino: ['',],
        enfermedades: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        alergias: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        tratamientoMedico: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        lentes: [''],
        piePlano: [''],
        zapatoOrtopedico: [''],
        problemasAprendizaje: [''],
        relacionPareja: [''],
        problemasFamilia: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        afectacionProblemas: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        tratamientoPsicologico: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        desagradaFamilia: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        agradaFamilia: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        actividadDesagrada: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        actividadAgrada: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        defectos: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        virtudes: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        futuro: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
        comentarios: ['', Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')],
                    usuarioRegistro: [this.Padre[0]],

    });



    tiposDeSangre = [
        { id: 'A+', nombre: 'A Positivo' },
        { id: 'A-', nombre: 'A Negativo' },
        { id: 'B+', nombre: 'B Positivo' },
        { id: 'B-', nombre: 'B Negativo' },
        { id: 'AB+', nombre: 'AB Positivo' },
        { id: 'AB-', nombre: 'AB Negativo' },
        { id: 'O+', nombre: 'O Positivo' },
        { id: 'O-', nombre: 'O Negativo' }
    ];

    estados = [
        'Aguascalientes',
        'Baja California',
        'Baja California Sur',
        'Campeche',
        'Chiapas',
        'Chihuahua',
        'Coahuila',
        'Colima',
        'Ciudad de México',
        'Durango',
        'Guanajuato',
        'Guerrero',
        'Hidalgo',
        'Jalisco',
        'Mexico',
        'Michoacan',
        'Morelos',
        'Nayarit',
        'Nuevo Leon',
        'Oaxaca',
        'Puebla',
        'Queretaro',
        'Quintana Roo',
        'San Luis Potosi',
        'Sinaloa',
        'Sonora',
        'Tabasco',
        'Tamaulipas',
        'Tlaxcala',
        'Veracruz',
        'Yucatan',
        'Zacatecas',
    ];

    // Datos general Alumno
    AlumnoDatos: any[] = [
        { titulo: 'PrimerNombre:', form: 'primerNombre', tipo: 'text', errorType: 'required' },
        { titulo: 'SegundoNombre:', form: 'segundoNombre', tipo: 'text', errorType: 'required' },
        { titulo: 'ApellidoPaterno:', form: 'apellidoPaterno', tipo: 'text', errorType: 'required' },
        { titulo: 'ApellidoMaterno:', form: 'apellidoMaterno', tipo: 'text', errorType: 'required' },
    ];
    EdadAlumno: any[] = [
        { id: '1', num: '1 Año' },
        { id: '2', num: '2 Años' },
        { id: '3', num: '3 Años' },
        { id: '4', num: '4 Años' },
        { id: '5', num: '5 Años' },
        { id: '6', num: '6 Años' },
        { id: '7', num: '7 Años' },
        { id: '8', num: '8 Años' },
        { id: '9', num: '9 Años' },
        { id: '10', num: '10 Años' },
        { id: '11', num: '11 Años' },
        { id: '12', num: '12 Años' },
        { id: '13', num: '13 Años' },
        { id: '14', num: '14 Años' },
        { id: '15', num: '15 Años' },
        { id: '16', num: '16 Años' },
        { id: '17', num: '17 Años' },
        { id: '18', num: '18 Años' },
        { id: '19', num: '19 Años' },
        { id: '20', num: '20 Años' },
    ];

    AlumnoDatos2: any[] = [
        { titulo: 'Institución de la que procede: ', form: 'institucionProcedencia', tipo: 'text', errorType: 'required' },
        { titulo: 'Motivo del cambio: ', form: 'motivoCambio', tipo: 'text', errorType: 'required' },
    ];
    // Datos general Padre
    PadreDatos: any[] = [
        { titulo: 'PrimerNombre:', form: 'padrePrimerNombre', tipo: 'text', errorType: 'required' },
        { titulo: 'SegundoNombre:', form: 'padreSegundoNombre', tipo: 'text' },
        { titulo: 'ApellidoPaterno:', form: 'padreApellidoPaterno', tipo: 'text', errorType: 'required' },
        { titulo: 'ApellidoMaterno:', form: 'padreApellidoMaterno', tipo: 'text', errorType: 'required' },
    ];

    PadreDatos2: any[] = [
        { titulo: 'Ocupación:', form: 'padreOcupacion', tipo: 'text', errorType: 'required' },
        { titulo: 'Lugar de Trabajo:', form: 'padreLugarTrabajo', tipo: 'text', errorType: 'required' },
        { titulo: 'Tel. de Trabajo:', form: 'padreTelefonoTrabajo', tipo: 'number', errorType: 'required', errorType2: 'pattern' },
        { titulo: 'Extensión:', form: 'padreExtension', tipo: 'text', errorType: 'required' },
    ];
    Escolaridad: any[] = [
        { id: 'S', nombre: 'Sin estudios' },
        { id: 'B', nombre: 'Bachillerato' },
        { id: 'L', nombre: 'Licenciatura' },
        { id: 'M', nombre: 'Maestría' },
        { id: 'D', nombre: 'Doctorado' },
    ];

    //Datos general  Madre
    madreDatos: any[] = [
        { titulo: 'PrimerNombre:', form: 'madrePrimerNombre', tipo: 'text', errorType: 'required' },
        { titulo: 'SegundoNombre:', form: 'madreSegundoNombre', tipo: 'text' },
        { titulo: 'ApellidoPaterno:', form: 'madreApellidoPaterno', tipo: 'text', errorType: 'required' },
        { titulo: 'ApellidoMaterno:', form: 'madreApellidoMaterno', tipo: 'text', errorType: 'required' },
    ];
    madreDatos1: any[] = [
        { titulo: 'Domicilio: ', form: 'madreDomicilio', tipo: 'text', errorType: 'required' },
        { titulo: 'C.P.Domicilio: ', form: 'madreCPDomicilio', tipo: 'number', errorType: 'required', errorType3: 'pattern' },
    ];
    madreDatos2: any[] = [
        { titulo: 'Ocupación:', form: 'madreOcupacion', tipo: 'text', errorType: 'required' },
        { titulo: 'Lugar de Trabajo:', form: 'madreLugarTrabajo', tipo: 'text', errorType: 'required' },
        { titulo: 'Tel. de Trabajo:', form: 'madreTelefonoTrabajo', tipo: 'number', errorType: 'required', errorType2: 'pattern' },
        { titulo: 'Extensión:', form: 'madreExtension', tipo: 'text', errorType: 'required' },
    ];
    //Formulario Padecimientos
    alergicoA: any[] = [
        { titulo: 'Aspirina: ', si: 'Si', no: 'No', form: 'aspirina' },
        { titulo: 'Penicilina: ', si: 'Si', no: 'No', form: 'penicilina' }
    ];
    HaPadecido: any[] = [
        { titulo: 'Paperas: ', si: 'Si', no: 'No', form: 'paperas' },
        { titulo: 'Sarampión: ', si: 'Si', no: 'No', form: 'sarampion' },
        { titulo: 'Rúbeola: ', si: 'Si', no: 'No', form: 'rubeola' },
        { titulo: 'Escarlatina: ', si: 'Si', no: 'No', form: 'escarlatina' },
        { titulo: 'Tosferina: ', si: 'Si', no: 'No', form: 'tosferina' },
        { titulo: 'Tifoidea: ', si: 'Si', no: 'No', form: 'tifoidea' },
        { titulo: 'Hepatitis: ', si: 'Si', no: 'No', form: 'hepatitis' },
        { titulo: 'Varicela: ', si: 'Si', no: 'No', form: 'varicela' },
        { titulo: 'Bronquitis: ', si: 'Si', no: 'No', form: 'bronquitis' },
        { titulo: 'Apendicitis: ', si: 'Si', no: 'No', form: 'apendicitis' },
        { titulo: 'Meningitis: ', si: 'Si', no: 'No', form: 'meninguitis' },
        { titulo: 'Desmayos: ', si: 'Si', no: 'No', form: 'desmayos' },
        { titulo: 'COVID-19: ', si: 'Si', no: 'No', form: 'covid' },
    ];
    PadeceFrecuencia: any[] = [
        { titulo: 'Garganta: ', si: 'Si', no: 'No', form: 'garganta' },
        { titulo: 'Estomago: ', si: 'Si', no: 'No', form: 'estomago' },
        { titulo: 'Catarro: ', si: 'Si', no: 'No', form: 'catarro' },
        { titulo: 'Diarrea: ', si: 'Si', no: 'No', form: 'diarrea' },
        { titulo: 'Dolores de cabeza: ', si: 'Si', no: 'No', form: 'dolorCabeza' },
        { titulo: 'Fiebres Altas: ', si: 'Si', no: 'No', form: 'fiebreAlta' },
        { titulo: 'Comezón Frecuente: ', si: 'Si', no: 'No', form: 'comezonFrecuente' },
        { titulo: 'Mareos: ', si: 'Si', no: 'No', form: 'mareos' },
    ];
    padeciminetos: any[] = [
        { titulo: ' Si es diabetico,¿Qué precausiones sigue?', form: 'diabetes', tipo: 'text', errorType: 'required' },
        { titulo: 'Si es asmático,¿Qué medicamento utiliza?', form: 'asmatico', tipo: 'text', errorType: 'required' },
        { titulo: 'Si es epiléptico,¿Qué medicamento utiliza?', form: 'epileptico', tipo: 'text', errorType: 'required' },
        { titulo: '¿Presenta alguna enfermedad de la piel?, ¿Cuál?', form: 'enfermedadPiel', tipo: 'text', errorType: 'required' },
    ];

    //Antecedentes Alumno

    AntecedentesAlumno: any[] = [
        { titulo: '¿Tuvo problemas en el embarazo? ', si: 'Si', no: 'No', form: 'problemasEmbarazo' },
        { titulo: '¿Tuvo problemas en el parto? ', si: 'Si', no: 'No', form: 'problemasParto' },
    ];
    AntecedentesAlumno1: any[] = [
        { titulo: '¿Cuánto pesó?', form: 'peso', tipo: 'number' },
        { titulo: '¿Cuánto pesa?', form: 'pesoActual', tipo: 'number' },
    ];
    AntecedentesAlumno2: any[] = [
        { titulo: '¿Cuánto Midió?', form: 'talla1', tipo: 'number' },
        { titulo: '¿Cuánto Mide?', form: 'tallaActual', tipo: 'number' },
    ];
    edadControl = [
        { id: '1', nombre: '1 Años' },
        { id: '2', nombre: '2 Años' },
        { id: '3', nombre: '3 Años' },
        { id: '4', nombre: '4 Años' },
        { id: '5', nombre: '5 Años' },
        { id: '6', nombre: '6 Años' },
        { id: '7', nombre: '7 años' }
    ]
    edad: any[] = [
        { titulo: '¿A que edad?', form: 'edadGateo', errorType: 'required' },
        { titulo: 'Edad en la que habló ', form: 'edadHablo', errorType: 'required' },
        { titulo: 'Edad en la que caminó', form: 'edadCamino', errorType: 'required' },
    ];
    AntecedentesAlumno3: any[] = [
        { titulo: 'Enfermedades que ha padecido:', form: 'enfermedades', tipo: 'text', errorType: 'required' },
        { titulo: 'Enfermedades o alergias que padece:', form: 'alergias', tipo: 'text', errorType: 'required' },
        { titulo: '¿Está en algún tratamiento médico?', form: 'tratamientoMedico', tipo: 'text', errorType: 'required' },
    ];
    AntecedentesAlumno4: any[] = [
        { titulo: '¿Usa lentes?', si: 'Si', no: 'No', form: 'lentes', errorType: 'required' },
        { titulo: '¿Tiene pie plano?', si: 'Si', no: 'No', form: 'piePlano', errorType: 'required' },
        { titulo: '¿Utiliza plantilla o zapato ortopédico? ', si: 'Si', no: 'No', form: 'zapatoOrtopedico', errorType: 'required' },
    ];
    AntecedentesAlumno5: any[] = [
        { titulo: '¿Qué es lo que creen le desagrada más al niño de su familia?', form: 'desagradaFamilia', tipo: 'text', errorType: 'required' },
        { titulo: '¿Qué es lo que creen le agrada más al niño de su familia?', form: 'agradaFamilia', tipo: 'text', errorType: 'required' },
        { titulo: '¿Qué actividades de su hogar no le gusta hacer a su hijo?', form: 'actividadDesagrada', tipo: 'text', errorType: 'required' },
        { titulo: '¿Qué actividades de su hogar le gusta hacer a su hijo?', form: 'actividadAgrada', tipo: 'text', errorType: 'required' },
        { titulo: '¿Cuáles son los mayores defectos de su hijo?', form: 'defectos', tipo: 'text', errorType: 'required' },
        { titulo: '¿Cuáles son las mayores virtudes de su hijo?', form: 'virtudes', tipo: 'text', errorType: 'required' },
        { titulo: '¿Qué es lo que espera en el futuro para su hijo?', form: 'futuro', tipo: 'text', errorType: 'required' },
        { titulo: 'Algún comentario que crea importante agregar:', form: 'comentarios', tipo: 'text', errorType: 'required' },
    ];
    //covid
    covid: any[] = [
        { titulo: '¿Cuántos miembros de su familia viven en la misma casa?', form: 'cantidadPersonas', tipo: 'number', errorType: 'required' },
        { titulo: '¿Cuántos miembros ya han sido vacunados?', form: 'cantidadVacunados', tipo: 'number', errorType: 'required' },
        { titulo: '¿Qué medidas de higiene maneja en su hogar?', form: 'medidadHigiene', tipo: 'text', errorType: 'required' },
    ];

    FormularioCompleto: any[] = [];

    valoresCombinados: any = {};
    selected = new FormControl();
    todayDate: Date = new Date();
    todayDate1: Date = new Date();
    datos: any;
    isLoading: boolean = true;
    stepperOrientation: any;
    isLinear = false;
    screenSize: number;
    private id: string = '';
    dataAlum: any;
    nombreAlumno: any;
    constructor(private _enviarInfo: EnviarInfoService, private fb: FormBuilder, private _registroAcademico: RegistroAcademicoService, private _router: Router,
    public dialog: MatDialog, private breakpointObserver: BreakpointObserver, private route: ActivatedRoute
) {
    this.todayDate.setFullYear(new Date().getFullYear(), 0, 1);
    this.todayDate1.setFullYear(new Date().getFullYear() - 20, 0, 1);
    this.stepperOrientation = breakpointObserver
        .observe('(min-width: 800px)')
        .pipe(map(({ matches }) => (matches ? 'horizontal' : 'vertical')));
    this.onResize();
    this.screenSize = window.innerWidth;

    // Inicializar con al menos una persona autorizada
    this.agregarPersonaAutorizada();
}

get personasAutorizadas(): FormArray {
    return this.form4.get('personasAutorizadas') as FormArray;
}
  agregarPersonaAutorizada() {
  this.personasAutorizadas.push(this.crearPersonaAutorizada());  }

// Función para crear un FormGroup de persona autorizada
crearPersonaAutorizada(nombre: string = '', telefono: string = '', parentesco: string = ''): FormGroup {
    return this.fb.group({
        nombre: [nombre, [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
        telefono: [telefono, [Validators.required, Validators.pattern('^[0-9+\\-\\s()]*$'), Validators.minLength(10)]],
        parentesco: [parentesco, [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]]
    });
}

// Función para eliminar una persona autorizada
eliminarPersonaAutorizada(index: number): void {
    if (this.personasAutorizadas.length > 1) {
        this.personasAutorizadas.removeAt(index);
    }
}

// Función para validar campos de persona autorizada
isPersonaAutorizadaInvalid(index: number, campo: string): boolean {
    const persona = this.personasAutorizadas.at(index);
    const field = persona.get(campo);
    return field ? field.invalid && (field.dirty || field.touched) : false;
}
    onResize() {
        this.screenSize = window.innerWidth;
    }

    getdatos() {
        this._registroAcademico.getOneRegistroAcademico(this.id).subscribe((data: any) => {
            this.isLoading = false;
            this.datos = data.registro[0];
            if (this.datos !== undefined) {
                this.form.get('primerNombre')?.setValue(this.datos.FiDI_Nombre1);
                this.form.get('segundoNombre')?.setValue(this.datos.FiDI_Nombre2);
                this.form.get('apellidoPaterno')?.setValue(this.datos.FiDI_ApellidoPaterno);
                this.form.get('apellidoMaterno')?.setValue(this.datos.FiDI_ApellidoMaterno);
                this.form.get('curp')?.setValue(this.datos.FiDI_CURP);
                this.form.get('sexo')?.setValue(this.datos.FiDI_Sexo);
                this.form.get('edad')?.setValue(this.datos.FiDI_Edad);
                this.form.get('ciudadNacimiento')?.setValue(this.datos.FiDI_NacCiudad);
                this.form.get('estado')?.setValue(this.datos.FiDI_NacEstado);
                const fechaNacimiento = new Date(
                    Number(this.datos.FiDI_NacFechaAnio),
                    Number(this.datos.FiDI_NacFechaMes) - 1,
                    Number(this.datos.FiDI_NacFechaDia)
                );
                if (this.datos.FiDI_NacFechaAnio != 0) {

                    this.form.get('fechaNacimiento')?.setValue(fechaNacimiento.toISOString());
                } else {
                    this.form.get('fechaNacimiento')?.setValue('');

                }
                this.form.get('domicilio')?.setValue(this.datos.FiDI_Domicilio);
                this.form.get('telefonoCasa')?.setValue(this.datos.FiDI_Telefono);
                this.form.get('institucionProcedencia')?.setValue(this.datos.FiDI_InstProce);
                this.form.get('motivoCambio')?.setValue(this.datos.FiDI_MotivoCambio);
                // Padre
                this.form2.get('padrePrimerNombre')?.setValue(this.datos.FiDI_PadNombre1);
                this.form2.get('padreSegundoNombre')?.setValue(this.datos.FiDI_PadNombre2);
                this.form2.get('padreApellidoPaterno')?.setValue(this.datos.FiDI_PadApellidoPaterno);
                this.form2.get('padreApellidoMaterno')?.setValue(this.datos.FiDI_PadApellidoMaterno);
                this.form2.get('padreCurp')?.setValue(this.datos.FiDI_PadCURP);
                this.form2.get('padreNacionalidad')?.setValue(this.datos.FiDI_PadNacionalidad);
                this.form2.get('padreEstadoCivil')?.setValue(this.datos.FiDI_PadEstadoCivil);
                const fechaNacimiento1 = new Date(
                    Number(this.datos.FiDI_PadNacFechaAnio),
                    Number(this.datos.FiDI_PadNacFechaMes) - 1,
                    Number(this.datos.FiDI_PadNacFechaDia)
                );

                if (this.datos.FiDI_PadNacFechaAnio != 0) {

                    this.form2.get('padreFechaNacimiento')?.setValue(fechaNacimiento1.toISOString());
                } else {
                    this.form2.get('padreFechaNacimiento')?.setValue('');

                }
                this.form2.get('padreDomicilio')?.setValue(this.datos.FiDI_PadDomicilio);
                this.form2.get('padreCPDomicilio')?.setValue(this.datos.FiDI_PadCP);
                this.form2.get('padreEscolaridad')?.setValue(this.datos.FiDI_PadEscolaridad);
                this.form2.get('padreOcupacion')?.setValue(this.datos.FiDI_PadOcupacion);
                this.form2.get('padreLugarTrabajo')?.setValue(this.datos.FiDI_PadLugTrabajo);
                this.form2.get('padreTelefonoTrabajo')?.setValue(this.datos.FiDI_PadTelTrabajo);
                this.form2.get('padreExtension')?.setValue(this.datos.FiDI_PadTelTrabajoExt);
                this.form2.get('padreCelular')?.setValue(this.datos.FiDI_PadCelular);
                this.form2.get('padreCorreo')?.setValue(this.datos.FiDI_PadCorreo);
                //Madre
                this.form3.get('madrePrimerNombre')?.setValue(this.datos.FiDI_MadNombre1);
                this.form3.get('madreSegundoNombre')?.setValue(this.datos.FiDI_MadNombre2);
                this.form3.get('madreApellidoPaterno')?.setValue(this.datos.FiDI_MadApellidoPaterno);
                this.form3.get('madreApellidoMaterno')?.setValue(this.datos.FiDI_MadApellidoMaterno);
                this.form3.get('madreCurp')?.setValue(this.datos.FiDI_MadCURP);
                this.form3.get('madreNacionalidad')?.setValue(this.datos.FiDI_MadNacionalidad);
                this.form3.get('madreEstadoCivil')?.setValue(this.datos.FiDI_MadEstadoCivil);
                const fechaNacimiento2 = new Date(
                    Number(this.datos.FiDI_MadNacFechaAnio),
                    Number(this.datos.FiDI_MadNacFechaMes) - 1,
                    Number(this.datos.FiDI_MadNacFechaDia)
                );
                if (this.datos.FiDI_MadNacFechaAnio != 0) {

                    this.form3.get('madreFechaNacimiento')?.setValue(fechaNacimiento2.toISOString());
                } else {
                    this.form3.get('madreFechaNacimiento')?.setValue('');

                }
                this.form3.get('madreDomicilio')?.setValue(this.datos.FiDI_MadDomicilio);
                this.form3.get('madreCPDomicilio')?.setValue(this.datos.FiDI_MadCP);
                this.form3.get('madreEscolaridad')?.setValue(this.datos.FiDI_MadEscolaridad);
                this.form3.get('madreOcupacion')?.setValue(this.datos.FiDI_MadOcupacion);
                this.form3.get('madreLugarTrabajo')?.setValue(this.datos.FiDI_MadLugTrabajo);
                this.form3.get('madreTelefonoTrabajo')?.setValue(this.datos.FiDI_MadTelTrabajo);
                this.form3.get('madreExtension')?.setValue(this.datos.FiDI_MadTelTrabajoExt);
                this.form3.get('madreCelular')?.setValue(this.datos.FiDI_MadCelular);
                this.form3.get('madreCorreo')?.setValue(this.datos.FiDI_MadCorreo);
                //Autorizacion
                this.form4.get('PadreFam')?.setValue(this.datos.FiDI_RecogerPadre);
                this.form4.get('MadreFam')?.setValue(this.datos.FiDI_RecogerMadre);
               if (Array.isArray(this.datos.personasAutorizadas) && this.datos.personasAutorizadas.length > 0) {
  this.datos.personasAutorizadas.forEach((persona: any) => {
    this.personasAutorizadas.push(
      this.crearPersonaAutorizada(persona.nombre, persona.telefono, persona.parentesco)
    );
  });
} else {
  // Si no hay datos, agregar al menos uno vacío para que el form tenga un input disponible
  this.agregarPersonaAutorizada();
}

                this.form4.get('AutorizarAlum')?.setValue(this.datos.FiDI_RetirarseSolo);

                //Padecimientos
                this.form5.get('tipoSangre')?.setValue(this.datos.CedA_TipoSangre);
                this.form5.get('aspirina')?.setValue(this.datos.CedA_AlergiaAspirina);
                this.form5.get('penicilina')?.setValue(this.datos.CedA_AlergiaPenicilina);
                this.form5.get('otrosMedicamentos')?.setValue(this.datos.CedA_AlergiaOtro);
                this.form5.get('paperas')?.setValue(this.datos.CedA_PadPaperas);
                this.form5.get('sarampion')?.setValue(this.datos.CedA_PadSarampio);
                this.form5.get('rubeola')?.setValue(this.datos.CedA_PadRubeola);
                this.form5.get('escarlatina')?.setValue(this.datos.CedA_PadEscarlatina);
                this.form5.get('tosferina')?.setValue(this.datos.CedA_PadTosferina);
                this.form5.get('tifoidea')?.setValue(this.datos.CedA_PadTifoidea);
                this.form5.get('hepatitis')?.setValue(this.datos.CedA_PadHepatitis);
                this.form5.get('varicela')?.setValue(this.datos.CedA_PadVaricela);
                this.form5.get('bronquitis')?.setValue(this.datos.CedA_PadBronquitis);
                this.form5.get('apendicitis')?.setValue(this.datos.CedA_PadApendicitis);
                this.form5.get('meninguitis')?.setValue(this.datos.CedA_PadMeningitis);
                this.form5.get('desmayos')?.setValue(this.datos.CedA_PadDesmayos);
                this.form5.get('covid')?.setValue(this.datos.CedA_PadCovid19);
                this.form5.get('garganta')?.setValue(this.datos.CedA_PadGarganta);
                this.form5.get('estomago')?.setValue(this.datos.CedA_PadEstomago);
                this.form5.get('catarro')?.setValue(this.datos.CedA_PadCatarro);
                this.form5.get('diarrea')?.setValue(this.datos.CedA_PadDiarrea);
                this.form5.get('dolorCabeza')?.setValue(this.datos.CedA_PadDolorCabeza);
                this.form5.get('fiebreAlta')?.setValue(this.datos.CedA_PadFiebreAlta);
                this.form5.get('comezonFrecuente')?.setValue(this.datos.CedA_PadComezon);
                this.form5.get('mareos')?.setValue(this.datos.CedA_PadMareos);
                this.form5.get('diabetes')?.setValue(this.datos.CedA_DiabeticoPrecauciones);
                this.form5.get('asmatico')?.setValue(this.datos.CedA_AsmaticoPrecauciones);
                this.form5.get('epileptico')?.setValue(this.datos.CedA_EpilepticoPrecauciones);
                this.form5.get('enfermedadPiel')?.setValue(this.datos.CedA_EnfermedadEnPiel);
                //Antecedentes
                this.form6.get('problemasEmbarazo')?.setValue(this.datos.CedA_ProbEmbarazo);
                this.form6.get('problemasParto')?.setValue(this.datos.CedA_ProbParto);
                this.form6.get('peso')?.setValue(this.datos.CedA_PesoNacimiento);
                this.form6.get('pesoActual')?.setValue(this.datos.CedA_PesoActual);
                this.form6.get('talla1')?.setValue(this.datos.CedA_AlturaNacimiento);
                this.form6.get('tallaActual')?.setValue(this.datos.CedA_AlturaActual);
                this.form6.get('edad1')?.setValue(this.datos.CedA_EsfinteresDiurno);
                this.form6.get('edad2')?.setValue(this.datos.CedA_EsfinteresNocturno);
                this.form6.get('gateo')?.setValue(this.datos.CedA_Gateo);
                this.form6.get('edadGateo')?.setValue(this.datos.CedA_GateoEdad);
                this.form6.get('edadHablo')?.setValue(this.datos.CedA_EdadHablo);
                this.form6.get('edadCamino')?.setValue(this.datos.CedA_EdadCamino);
                this.form6.get('enfermedades')?.setValue(this.datos.CedA_EnfermedadesPadecidas);
                this.form6.get('alergias')?.setValue(this.datos.CedA_EnfermedadesAlergiasActuales);
                this.form6.get('tratamientoMedico')?.setValue(this.datos.CedA_TratamientoMedicoActual);
                this.form6.get('lentes')?.setValue(this.datos.CedA_UsaLentes);
                this.form6.get('piePlano')?.setValue(this.datos.CedA_PiePlano);
                this.form6.get('zapatoOrtopedico')?.setValue(this.datos.CedA_Ortopedico);
                this.form6.get('problemasAprendizaje')?.setValue(this.datos.CedA_ProbAprendizaje);
                this.form6.get('relacionPareja')?.setValue(this.datos.CedA_RelPareja);
                this.form6.get('problemasFamilia')?.setValue(this.datos.CedA_ProblemasFamiliares);
                this.form6.get('afectacionProblemas')?.setValue(this.datos.CedA_HijoAfectado);
                this.form6.get('tratamientoPsicologico')?.setValue(this.datos.CedA_TratPsicologico);
                this.form6.get('desagradaFamilia')?.setValue(this.datos.CedA_LoQueDesagradaFamilia);
                this.form6.get('agradaFamilia')?.setValue(this.datos.CedA_LoQueAgradaFamilia);
                this.form6.get('actividadDesagrada')?.setValue(this.datos.CedA_HogarNoGustan);
                this.form6.get('actividadAgrada')?.setValue(this.datos.CedA_HogarGustan);
                this.form6.get('defectos')?.setValue(this.datos.CedA_Defectos);
                this.form6.get('virtudes')?.setValue(this.datos.CedA_Virtudes);
                this.form6.get('futuro')?.setValue(this.datos.CedA_Futuro);
                this.form6.get('comentarios')?.setValue(this.datos.CedA_Comentario);




            }
        });
    }


    isValidField(field: string, errorType: string) {
        const control = this.form.get(field);
        return control?.hasError(errorType) && control?.touched;
    }
    isValidField1(field: string, errorType: string) {
        const control = this.form2.get(field);
        return control?.hasError(errorType) && control?.touched;
    }
    isValidField2(field: string, errorType: string) {
        const control = this.form3.get(field);
        return control?.hasError(errorType) && control?.touched;
    }
    isValidField3(field: string, errorType: string) {
        const control = this.form4.get(field);
        return control?.hasError(errorType) && control?.touched;
    }
    isValidField4(field: string, errorType: string) {
        const control = this.form5.get(field);
        return control?.hasError(errorType) && control?.touched;
    }
    isValidField5(field: string, errorType: string) {
        const control = this.form6.get(field);
        return control?.hasError(errorType) && control?.touched;
    }


    ngOnInit(): void {
        this.route.paramMap.subscribe(params => {
            const id = params.get('id');

            this.id = atob(id || '');
        });
        this._registroAcademico.getOne(this.id).subscribe((data: any) => {
            this.dataAlum = data;
            this.nombreAlumno = data[0].nombreUsuario;
        });
        this.getdatos();
        this._enviarInfo.currentTextColor.subscribe(textColor => {
            this.textColor = textColor;
        });
        this._enviarInfo.currentColor.subscribe(color => {
            this.color = color;
        });
        this.form.get('idAlumno')?.setValue(this.id);
        this.form.get('edad')?.disable();
    }

    siguienteTap(index: number) {
        this.selected.setValue(index);
    }

    siguiente() {
        if (this.form.invalid) {
            this.form.markAllAsTouched();
            return;
        }
    }

    siguiente1() {
        if (this.form2.invalid) {
            this.form2.markAllAsTouched();
            return;
        }
    }

    siguiente2() {
        if (this.form3.invalid) {
            this.form3.markAllAsTouched();
            return;
        }
    }

    siguiente3() {
        if (this.form4.invalid) {
            this.form4.markAllAsTouched();
            return;
        }
    }

    siguiente4() {
        if (this.form5.invalid) {
            this.form5.markAllAsTouched();
            return;
        }
    }

    siguiente5() {
        if (this.form6.invalid) {
            this.form6.markAllAsTouched();
            return;
        }
    }

    fecha(fecha: any) {
        const fechaNacimiento = fecha.value;
        const hoy = new Date();
        const edad = hoy.getFullYear() - fechaNacimiento.getFullYear();
        this.form.get('edad')?.setValue(edad.toString());
    }

    Asistente() {
        const domicilio = this.dialog.open(Asistente, {
            data: this.form.getRawValue().domicilio
        });
        domicilio.afterClosed().subscribe(result => {
            if (result) {
                let domicilio = `${result.calle}, ${result.exterior}, ${result.interior}, ${result.colonia}, ${result.localidad}, ${result.municipio}, ${result.estado}, ${result.pais}, ${result.CP}, ${result.referencia}`;
                this.form.controls['domicilio'].setValue(domicilio.trim());
            }
        });
    }

    Asistente1() {
        const domicilio = this.dialog.open(Asistente, {
            data: this.form2.getRawValue().padreDomicilio
        });
        domicilio.afterClosed().subscribe(result => {
            if (result) {
                let domicilio = `${result.calle}, ${result.exterior}, ${result.interior}, ${result.colonia}, ${result.localidad}, ${result.municipio}, ${result.estado}, ${result.pais}, ${result.CP}, ${result.referencia}`;
                this.form2.controls['padreDomicilio'].setValue(domicilio.trim());
                this.form2.controls['padreCPDomicilio'].setValue(result.CP.trim());
            }
        });
    }

    Asistente2() {
        const domicilio = this.dialog.open(Asistente, {
            data: this.form3.getRawValue().madreDomicilio
        });
        domicilio.afterClosed().subscribe(result => {
            if (result) {
                let domicilio = `${result.calle}, ${result.exterior}, ${result.interior}, ${result.colonia}, ${result.localidad}, ${result.municipio}, ${result.estado}, ${result.pais}, ${result.CP}, ${result.referencia}`;
                this.form3.controls['madreDomicilio'].setValue(domicilio.trim());
                this.form3.controls['madreCPDomicilio'].setValue(result.CP.trim());
            }
        });
    }

    onSave() {

        if (this.form.valid) {
            if (this.form.value.fechaNacimiento) {
                const fechaNacimiento = new Date(this.form.value.fechaNacimiento);
                const dia = fechaNacimiento.getDate();
                const mes = fechaNacimiento.getMonth() + 1;
                const año = fechaNacimiento.getFullYear();
                this.form.controls['diaNacimiento'].setValue(dia);
                this.form.controls['mesNacimiento'].setValue(mes);
                this.form.controls['añoNacimiento'].setValue(año);
            }
            Object.assign(this.valoresCombinados, this.form.getRawValue());
        }
        if (this.form2.valid) {
            if (this.form2.value.padreFechaNacimiento) {
                const fechaNacimiento = new Date(this.form2.value.padreFechaNacimiento);
                const dia = fechaNacimiento.getDate();
                const mes = fechaNacimiento.getMonth() + 1;
                const año = fechaNacimiento.getFullYear();
                this.form2.controls['padreDiaNacimiento'].setValue(dia);
                this.form2.controls['padreMesNacimiento'].setValue(mes);
                this.form2.controls['padreAñoNacimiento'].setValue(año);
            }
            Object.assign(this.valoresCombinados, this.form2.getRawValue());
        }
        if (this.form3.valid) {
            if (this.form3.value.madreFechaNacimiento) {
                const fechaNacimiento = new Date(this.form3.value.madreFechaNacimiento);
                const dia = fechaNacimiento.getDate();
                const mes = fechaNacimiento.getMonth() + 1;
                const año = fechaNacimiento.getFullYear();
                this.form3.controls['madreDiaNacimiento'].setValue(dia);
                this.form3.controls['madreMesNacimiento'].setValue(mes);
                this.form3.controls['madreAñoNacimiento'].setValue(año);
            }
            Object.assign(this.valoresCombinados, this.form3.getRawValue());
        }
        if (this.form4.valid) {
            Object.assign(this.valoresCombinados, this.form4.getRawValue());
        }
        if (this.form5.valid) {
            Object.assign(this.valoresCombinados, this.form5.getRawValue());
        }
        if (this.form6.valid) {
            Object.assign(this.valoresCombinados, this.form6.getRawValue());
        }


        this._registroAcademico.getOneRegistroAcademico(this.id).subscribe((data: any) => {
            this.datos = data.registro[0];
            if (this.datos) {
                this._registroAcademico.ActualizarRegistroAcademico(this.valoresCombinados).subscribe((data: any) => {
                    Swal.fire('Actualizació exitosa', data.mensaje, 'success');
                });
                this._router.navigate(['/homePadres/registroAlumno']);
            } else {
                this._registroAcademico.createRegistroAcademico(this.valoresCombinados).subscribe((data: any) => {
                    Swal.fire('Registro exitoso', data.mensaje, 'success');
                });
                this._router.navigate(['/homePadres/registroAlumno']);
            }
        });
    }

    Salir() {
        Swal.fire({
            title: '¿Estás seguro de salir?',
            text: "Para guardar los datos ingresados, presiona el botón 'Guardar y salir'",
            icon: 'warning',
            showCancelButton: true,
            allowEscapeKey: false,
            allowOutsideClick: false,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            confirmButtonText: 'Guardar y salir',
            cancelButtonText: 'Salir sin guardar'
        }).then((result) => {
            if (result.isConfirmed) {
                this.onSave();
                this._router.navigate(['/homePadres/registroAlumno']);
            } else {
                this._router.navigate(['/homePadres/registroAlumno']);
            }
        });
    }
}

@Component({
    selector: 'app-registro',
    templateUrl: './registroAd.component.html',
    styleUrls: ['./registro.component.css'],
    providers: [provideNativeDateAdapter(),
    { provide: MAT_DATE_LOCALE, useValue: 'en-GB' }
    ],
})

export class RegistroAdComponent implements OnInit {
    Mes = [
        { id: '01', nombre: 'Enero' },
        { id: '02', nombre: 'Febrero' },
        { id: '03', nombre: 'Marzo' },
        { id: '04', nombre: 'Abril' },
        { id: '05', nombre: 'Mayo' },
        { id: '06', nombre: 'Junio' },
        { id: '07', nombre: 'Julio' },
        { id: '08', nombre: 'Agosto' },
        { id: '09', nombre: 'Septiembre' },
        { id: '10', nombre: 'Octubre' },
        { id: '11', nombre: 'Noviembre' },
        { id: '12', nombre: 'Diciembre' },
    ];
     selectedFile: File | null = null;
    GradoCursar: any[] = [];
    planPago: any[] = [];
    porcentaje: any[] = [];
    MetodoPago: any[] = [];
    color: string = '';
    textColor: string = '';
    form!: FormGroup;
    form2!: FormGroup;
    selected = new FormControl();
    radioButton: string = 'No';
    formularioCompleto: any = {}
    datos: any;
    private id: string = '';
    isLoading: boolean = true;
    dataAlum: any;
    nombreAlumno: any;
    gradoCur: any;
    Padre = JSON.parse(localStorage.getItem('userData') || '');

    constructor(private _enviarInfo: EnviarInfoService, private fb: FormBuilder, public dialog: MatDialog, private _registroAdministrativo: RegistroAcademicoService,
        private _router: Router, private _gradosEducativos: GradosEducativosService, private route: ActivatedRoute, private _registro: RegistroAcademicoService
    ) {
        this.formulario();
    }
formulario() {
    this.form = this.fb.group({
        idAlumno: [''],
        gradoCursar: [''],
        mesInscripcion: [''],
        planPago: [''],
        becaCurso: [''],
        becaPorcentaje: [''],
    });
    this.form2 = this.fb.group({
        factura: [''],
            metedoPago: ['EF'],
        RFCFactura: ['XAXX010101000'],
        razonSocial: ['PUBLICO EN GENERAL'],
        domicilioFactura: [''],
        correoFactura: ['', [Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$')]],
        usuarioRegistro: [this.Padre[0]],
        cuentaPago: [''],
        constanciaFiscal: ['']
    });
    this.form2.get('domicilioFactura')?.disable();
    this.form2.get('correoFactura')?.disable();
    this.form2.get('razonSocial')?.disable();
    this.form2.get('RFCFactura')?.disable();
    this.form2.get('metedoPago')?.disable();
}
    onFileSelected(event: any) {
        const file = event.target.files[0];
        if (file) {
            if (file.type !== 'application/pdf') {
                Swal.fire('Error', 'Solo se permiten archivos PDF', 'error');
                event.target.value = '';
                this.selectedFile = null;
                return;
            }

            if (file.size > 5 * 1024 * 1024) {
                Swal.fire('Error', 'El archivo no puede ser mayor a 5MB', 'error');
                event.target.value = '';
                this.selectedFile = null;
                return;
            }

            this.selectedFile = file;
            this.form2.get('constanciaFiscal')?.setValue(file.name);
        }
    }

  cargarFormulario() {
        this._registroAdministrativo.getOneRegistroAdmin(this.id).subscribe((data: any) => {
            this.isLoading = false;
            this.datos = data.registro[0];
            if (this.datos != undefined) {
                this.form.get('gradoCursar')?.setValue(this.datos.RegA_GradoCursar);
                this.form.get('mesInscripcion')?.setValue(this.datos.RegA_MesInscripcion);
                this.form.get('planPago')?.setValue(this.datos.RegA_PlanPagos);
                this.form.get('becaCurso')?.setValue(this.datos.RegA_BecaCurso);
                this.form.get('becaPorcentaje')?.setValue(this.datos.RegA_BecaPorcentaje);
                this.form2.get('factura')?.setValue(this.datos.RegA_RequiereFactura);
                this.form2.get('metedoPago')?.setValue(this.datos.RegA_MetodoPago);
                this.form2.get('RFCFactura')?.setValue(this.datos.RegA_RfcFactura);
                this.form2.get('razonSocial')?.setValue(this.datos.RegA_NombreFactura);
                this.form2.get('domicilioFactura')?.setValue(this.datos.RegA_DireccionFactura);
                this.form2.get('correoFactura')?.setValue(this.datos.RegA_CorreoFactura);
                this.form2.get('cuentaPago')?.setValue(this.datos.RegA_CuentaPago);
                // Mostrar nombre del archivo si existe
                if (this.datos.RegA_ConstanciaFiscal) {
                    this.form2.get('constanciaFiscal')?.setValue(this.datos.RegA_ConstanciaFiscal);
                }
            }
        });
    }
   factura(event: any) {
        if (event.value === 'No') {
            this.form2.get('metedoPago')?.setValue('EF');
            this.form2.get('RFCFactura')?.setValue('XAXX010101000');
            this.form2.get('razonSocial')?.setValue('PUBLICO EN GENERAL');
            this.form2.get('correoFactura')?.setValue('NA');
            this.form2.get('domicilioFactura')?.setValue('NA');
            this.form2.get('cuentaPago')?.setValue('00');
            this.form2.get('domicilioFactura')?.disable();
            this.form2.get('correoFactura')?.disable();
            this.form2.get('razonSocial')?.disable();
            this.form2.get('RFCFactura')?.disable();
            this.form2.get('metedoPago')?.disable();
        } else {
            this.form2.get('metedoPago')?.setValue('');
            this.form2.get('RFCFactura')?.setValue('');
            this.form2.get('razonSocial')?.setValue('');
            this.form2.get('domicilioFactura')?.setValue('');
            this.form2.get('correoFactura')?.setValue('');
            this.form2.get('cuentaPago')?.setValue('01');
            this.form2.get('domicilioFactura')?.enable();
            this.form2.get('correoFactura')?.enable();
            this.form2.get('razonSocial')?.enable();
            this.form2.get('RFCFactura')?.enable();
            this.form2.get('metedoPago')?.enable();
        }
    }




    siguienteTap(index: number) {
        if (this.form.invalid) {
            this.form.markAllAsTouched();
            return
        }
        this.selected.setValue(index);
    }

    Salir() {
        Swal.fire({
            title: '¿Estás seguro de salir?',
            text: "Para guardar los datos ingresados, presiona el botón 'Guardar y salir'",
            icon: 'warning',
            showCancelButton: true,
            allowEscapeKey: false,
            allowOutsideClick: false,
            confirmButtonColor: '#3085d6',
            cancelButtonColor: '#d33',
            confirmButtonText: 'Guardar y salir',
            cancelButtonText: 'Salir sin guardar'
        }).then((result) => {
            if (result.isConfirmed) {
                this.guardarFormulario();
                this._router.navigate(['/homePadres/registroAlumno']);
            } else {
                this._router.navigate(['/homePadres/registroAlumno']);
            }
        });
    }

    isValidField(field: string, errorType: string) {
        const control = this.form.get(field);
        return control?.hasError(errorType) && control?.touched;
    }
    isValidField1(field: string, errorType: string) {
        const control = this.form2.get(field);
        return control?.hasError(errorType) && control?.touched;
    }

    ngOnInit(): void {
        let idNivel: any;
        this._enviarInfo.currentTextColor.subscribe(textColor => {
            this.textColor = textColor;
        });
        this._enviarInfo.currentColor.subscribe(color => {
            this.color = color;
        });

        this.route.paramMap.subscribe(params => {
            const id = params.get('id');

            this.id = atob(id || '');
        });
        this.form.get('idAlumno')?.setValue(this.id);
        this._registro.getOne(this.id).subscribe((data: any) => {
            this.dataAlum = data;
            this.nombreAlumno = data[0].nombreUsuario;
        });

        this._gradosEducativos.getAll().subscribe((data: any) => {
            if (data) {
                for (let i = 0; i < data.length; i++) {
                    if (data[i].nombreGrado == this.dataAlum[0].grado) {
                        idNivel = data[i].idNivel;
                    }
                }
            }
            this.GradoCursar = data.filter((data: any) => data.idNivel == idNivel);
        });
        this._registroAdministrativo.getPlanPago().subscribe((data: any) => {
            this.planPago = data.planPago.filter((data: any) => data.idNivelPlanPago == idNivel);
        });

        this._registroAdministrativo.getPorcentajeBeca().subscribe((data: any) => {
            this.porcentaje = data.porcentajeBeca;
        });

        this._registroAdministrativo.getMetodoPago().subscribe((data: any) => {
            this.MetodoPago = data.metodoPago;
        });

        this.cargarFormulario();
    }

async guardarFormulario() {
    if (this.form2.invalid) {
        this.form2.markAllAsTouched();
        return;
    }

    try {
        // 1. Habilita temporalmente campos deshabilitados para incluirlos
        this.form2.get('domicilioFactura')?.enable();
        this.form2.get('correoFactura')?.enable();
        this.form2.get('razonSocial')?.enable();
        this.form2.get('RFCFactura')?.enable();
        this.form2.get('metodoPago')?.enable();

        // 2. Fusiona ambos formularios
        const formularioCompleto = {
            ...this.form.getRawValue(),
            ...this.form2.getRawValue(),
        };

        // 3. Función para convertir archivo a Base64
        const fileToBase64 = (file: File): Promise<string> => {
            return new Promise((resolve, reject) => {
                const reader = new FileReader();
                reader.readAsDataURL(file);
                reader.onload = () => resolve(reader.result as string);
                reader.onerror = error => reject(error);
            });
        };

        // 4. Preparar datos para enviar
        const datosEnvio: any = {
            ...formularioCompleto,
            idEscuela: 'COLEGIOABC',
        };

        // 5. Convertir archivo a Base64 si existe
        if (this.selectedFile) {
            datosEnvio.constanciaFiscalBase64 = await fileToBase64(this.selectedFile);
            datosEnvio.nombreArchivo = this.selectedFile.name;
        }

        // 6. Ver datos en consola (DEBUG)
        console.log('Datos a enviar:', datosEnvio);

        // 7. Vuelve a deshabilitar los campos
        this.form2.get('domicilioFactura')?.disable();
        this.form2.get('correoFactura')?.disable();
        this.form2.get('razonSocial')?.disable();
        this.form2.get('RFCFactura')?.disable();
        this.form2.get('metodoPago')?.disable();

        // 8. Verificar si existe registro y enviar datos
        this._registroAdministrativo.getOneRegistroAdmin(this.id).subscribe((data: any) => {
            const idAlumno = formularioCompleto['idAlumno'];

            if (data.registro && data.registro.length > 0) {
                this._registroAdministrativo.actualizarRegistroAdministrativo(datosEnvio, idAlumno).subscribe(
                    (res: any) => {
                        Swal.fire('Actualización exitosa', res.mensaje, 'success');
                        this._router.navigate(['/homePadres/registroAlumno']);
                    },
                    (error) => {
                        Swal.fire('Error', 'No se pudo actualizar el registro', 'error');
                        console.error('Error al actualizar:', error);
                    }
                );
            } else {
                this._registroAdministrativo.crearRegistroAdministrativo(datosEnvio).subscribe(
                    (res: any) => {
                        Swal.fire('Registro exitoso', res.mensaje, 'success');
                        this._router.navigate(['/homePadres/registroAlumno']);
                    },
                    (error) => {
                        Swal.fire('Error', 'No se pudo crear el registro', 'error');
                        console.error('Error al crear:', error);
                    }
                );
            }
        });

    } catch (error) {
        console.error('Error en guardarFormulario:', error);
        Swal.fire('Error', 'Ocurrió un error al procesar el formulario', 'error');
    }
}

    Asistente() {
        const asistente = this.dialog.open(Asistente, {
            data: this.form2.getRawValue().domicilioFactura
        });
        asistente.afterClosed().subscribe((result) => {
            if (result) {
                let domicilio = `${result.calle}, ${result.exterior}, ${result.interior}, ${result.colonia}, ${result.localidad}, ${result.municipio}, ${result.estado}, ${result.pais}, ${result.CP}, ${result.referencia}`;
                this.form2.get('domicilioFactura')?.setValue(domicilio.trim());
            }
        });
    }
}


@Component({
    selector: 'App-Asistente',
    templateUrl: './Asistente.html',
    styleUrls: ['./registro.component.css'],
    standalone: true,
    imports: [MatDialogActions, MatDialogClose, MatButtonModule, MatFormFieldModule, MatInputModule, MatIcon, CommonModule, ReactiveFormsModule, MatOption, MatSelectModule]
})
export class Asistente {
    estados = [
        'Aguascalientes',
        'Baja California',
        'Baja California Sur',
        'Campeche',
        'Chiapas',
        'Chihuahua',
        'Coahuila',
        'Colima',
        'Ciudad de México',
        'Durango',
        'Guanajuato',
        'Guerrero',
        'Hidalgo',
        'Jalisco',
        'Mexico',
        'Michoacan',
        'Morelos',
        'Nayarit',
        'Nuevo Leon',
        'Oaxaca',
        'Puebla',
        'Queretaro',
        'Quintana Roo',
        'San Luis Potosi',
        'Sinaloa',
        'Sonora',
        'Tabasco',
        'Tamaulipas',
        'Tlaxcala',
        'Veracruz',
        'Yucatan',
        'Zacatecas',
    ];
    form!: FormGroup;
    maxCaracteres: number = 0;
    constructor(public dialogRef: MatDialogRef<Asistente>, private fb: FormBuilder, @Inject(MAT_DIALOG_DATA) public data: any) {
        this.Formulario();
    }


    Formulario() {
        this.form = this.fb.group({
            calle: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
            exterior: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
            interior: [''],
            colonia: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
            localidad: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
            municipio: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
            estado: ['', [Validators.required]],
            CP: ['', [Validators.required, Validators.pattern('^[0-9]{5}$')]],
            pais: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
            referencia: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
        });
    }

    isValidField(field: string, errorType: string) {
        const control = this.form.get(field);
        return control?.hasError(errorType) && control?.touched;
    }
    ngOnInit(): void {
        if (this.data) {
            const dataArr = this.data.split(',').map((item: any) => item.trim());
            this.form = this.fb.group({
                calle: [dataArr[0], [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
                exterior: [dataArr[1], [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
                interior: [dataArr[2]],
                colonia: [dataArr[3], [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
                localidad: [dataArr[4], [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
                municipio: [dataArr[5], [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
                estado: [dataArr[6], [Validators.required]],
                CP: [dataArr[8], [Validators.required, Validators.pattern('^[0-9]{5}$')]],
                pais: [dataArr[7], [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
                referencia: [dataArr[9], [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
            });
        }
    }

    guardar() {
        if (this.form.invalid) {
            this.form.markAllAsTouched();
            return;
        }
        if (this.form.value.interior === '') {
            this.form.get('interior')?.setValue('N/A');
        }
        this.dialogRef.close(this.form.value);
    }
    max() {
        this.maxCaracteres = this.form.get('referencia')?.value.length
    }
}
