import { ChangeDetectorRef, Component, ElementRef, Inject, OnInit, ViewChild } 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: ['', Validators.required],
    primerNombre: ['', [Validators.required, 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.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    apellidoMaterno: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    curp: ['', [Validators.required, Validators.pattern('^[A-Z]{1}[A-Z]{3}[0-9]{6}[HM]{1}[A-Z]{5}[A-Z0-9]{2}$')]],
    sexo: ['', Validators.required],
    edad: ['', Validators.required],
    ciudadNacimiento: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    estado: ['', Validators.required],
    fechaNacimiento: ['', [Validators.required, this.validateFechaNacimiento]],
    diaNacimiento: [this.dia, Validators.required],
    mesNacimiento: [this.mes, Validators.required],
    añoNacimiento: [this.año, Validators.required],
    domicilio: ['', Validators.required],
    telefonoCasa: ['', [Validators.required, Validators.pattern('^[0-9]{10}$')]],
    institucionProcedencia: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    motivoCambio: ['', [Validators.required, 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.required, 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.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    padreApellidoMaterno: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    padreCurp: ['', [Validators.required, Validators.pattern('^[A-Z]{1}[A-Z]{3}[0-9]{6}[HM]{1}[A-Z]{5}[A-Z0-9]{2}$')]],
    padreNacionalidad: ['', Validators.required],
    padreEstadoCivil: ['', Validators.required],
    padreFechaNacimiento: ['', [Validators.required, this.validateFechaNacimiento1]],
    padreDiaNacimiento: [this.dia, Validators.required],
    padreMesNacimiento: [this.mes, Validators.required],
    padreAñoNacimiento: [this.año, Validators.required],
    padreDomicilio: ['', Validators.required],
    padreCPDomicilio: ['', [Validators.required, Validators.pattern('^[0-9]{5}$')]],
    padreEscolaridad: ['', Validators.required],
    padreOcupacion: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    padreLugarTrabajo: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    padreTelefonoTrabajo: ['', [Validators.required, Validators.pattern('^[0-9]{10}$')]],
    padreExtension: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    padreCelular: ['', [Validators.required, Validators.pattern('^[0-9]{10}$')]],
    padreCorreo: ['', [Validators.required, Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$')]],
});

   form3 = this.fb.group({
    madrePrimerNombre: ['', [Validators.required, 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.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    madreApellidoMaterno: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    madreCurp: ['', [Validators.required, Validators.pattern('^[A-Z]{1}[A-Z]{3}[0-9]{6}[HM]{1}[A-Z]{5}[A-Z0-9]{2}$')]],
    madreNacionalidad: ['', Validators.required],
    madreEstadoCivil: ['', Validators.required],
    madreFechaNacimiento: ['', [Validators.required, this.validateFechaNacimiento1]],
    madreDiaNacimiento: [this.dia, Validators.required],
    madreMesNacimiento: [this.mes, Validators.required],
    madreAñoNacimiento: [this.año, Validators.required],
    madreDomicilio: ['', Validators.required],
    madreCPDomicilio: ['', [Validators.required, Validators.pattern('^[0-9]{5}$')]],
    madreEscolaridad: ['', Validators.required],
    madreOcupacion: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    madreLugarTrabajo: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    madreTelefonoTrabajo: ['', [Validators.required, Validators.pattern('^[0-9]{10}$')]],
    madreExtension: ['', [Validators.required, Validators.pattern('^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ,.][a-zA-Z0-9\\sáéíóúÁÉÍÓÚñÑ,.]*$')]],
    madreCelular: ['', [Validators.required, Validators.pattern('^[0-9]{10}$')]],
    madreCorreo: ['', [Validators.required, 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([]) // no obligatorio

});



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


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




    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, private cdr: ChangeDetectorRef
) {
    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());  }

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({
  title: 'Actualización exitosa',
  text: data.mensaje,
  icon: 'success',
  confirmButtonColor: '#4074b0',
});
                });
                this._router.navigate(['/homePadres/registroAlumno']);
            } else {
                this._registroAcademico.createRegistroAcademico(this.valoresCombinados).subscribe((data: any) => {
Swal.fire({
  title: 'Registro exitoso',
  text: data.mensaje,
  icon: 'success',
  confirmButtonColor: '#4074b0',
});
                });
                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' },
    ];
    modoEdicion: boolean = false;
    rutaArchivoOriginal: string = '';

     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') || '');
  rutaArchivo=' ';
  facturaDataOriginal: any = null;
  nombreArchivoCargado: any;
opcionFactura: string = 'No';
isSaving: boolean = false;
archivoEliminado: boolean = false;
valorFacturaAnterior: string | null = null;
opcionRequiereFaturaSi: boolean = false;
opcionRequiereFaturaNO: boolean = false;




    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, private cdr: ChangeDetectorRef


    ) {
        this.formulario();
    }
rutaArchivoSubido: string = '';

@ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;


eliminarArchivo() {
  Swal.fire({
    title: '¿Estás seguro?',
    text: 'Se eliminará el archivo de la Constancia Fiscal.',
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#d33',
    cancelButtonColor: '#3085d6',
    confirmButtonText: 'Eliminar',
    cancelButtonText: 'Cancelar'

  }).then((result) => {

Swal.fire({
  title: 'Espere un momento',
  text: "Este proceso puede tardar unos segundos",
  icon: 'warning',
  showConfirmButton: false,
  showCancelButton: false,
  allowEscapeKey: false,
  allowOutsideClick: false,
  timer: 3000,
  timerProgressBar: true})
    if (result.isConfirmed) {
      this._registroAdministrativo.eliminarArchivo(this.rutaArchivo).subscribe(() => {
      Swal.fire('Archivo eliminado', 'success');

this.archivoEliminado = true;
this.rutaArchivo = '';
this.rutaArchivoOriginal = '';
this.form2.get('constanciaFiscal')?.setValue('');


        if (this.facturaDataOriginal) {
          this.facturaDataOriginal.constanciaFiscal = '';
          console.log( this.facturaDataOriginal.constanciaFiscal);


        }
Swal.fire({
    title: 'Eliminado',
    text: 'El archivo ha sido eliminado corectamente',
    icon: 'success',
    showCancelButton: false,
    confirmButtonColor: '#4074b0',
    confirmButtonText: 'De acuerdo',


  });
      });
    }
  });
  this.archivoEliminado = true;
}


 mostrarCambiarArchivo(): boolean {
  return (!this.rutaArchivo || this.rutaArchivo.trim() === '') && !!this.selectedFile;
}


  mostrarEliminarArchivo(): boolean {
  return !!this.rutaArchivo && this.rutaArchivo.trim() !== '' && !this.selectedFile;
}


mostrarSeleccionarArchivo(): boolean {
  return (!this.rutaArchivo || this.rutaArchivo.trim() === '') && !this.selectedFile;
}

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: ['', Validators.required],
    });


    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();
}
nombreInvalido(nombre: string): boolean {
  const caracteresInvalidos = /[<>:"/\\|?*\u0000-\u001F]/; // incluye control chars
  const nombresReservados = /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(\..+)?$/i;

  return (
    caracteresInvalidos.test(nombre) ||
    nombre.length > 255 ||
    nombre.endsWith('.') ||
    nombre.endsWith(' ') ||
    nombresReservados.test(nombre)
  );
}

onFileSelected(event: any) {
  if (this.rutaArchivo && this.rutaArchivo.trim() !== '') {
    Swal.fire({
      icon: 'warning',
      title: 'Archivo ya existente',
      text: 'Primero elimina el archivo actual antes de seleccionar uno nuevo.',
    });
    return;
  }

  const file = event.target.files[0];

  if (file) {
    if (file.type !== 'application/pdf') {
      Swal.fire('Error', 'Solo se permiten archivos PDF', 'error');
      return;
    }

    // Validar tamaño
    if (file.size > 5 * 1024 * 1024) {
      Swal.fire('Error', 'El archivo no puede ser mayor a 5MB', 'error');
      return;
    }

    // Validar nombre de archivo (longitud y caracteres reservados)
    if (this.nombreInvalido(file.name)) {
      Swal.fire(
        'Nombre inválido',
        'El nombre del archivo contiene caracteres no permitidos o está reservado por el sistema.',
        'error'
      );
      return;
    }

    // Validar caracteres personalizados (tú decías permitir letras, números, puntos, guiones, etc.)
    const nombreValido = /^[a-zA-Z0-9_.\-ñÑáéíóúÁÉÍÓÚ\s()]+$/.test(file.name);
    if (!nombreValido) {
      Swal.fire(
        'Nombre inválido',
        'El nombre del archivo contiene caracteres no permitidos. Usa solo letras, números, guiones, guiones bajos y puntos.',
        'error'
      );
      return;
    }

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

cargarFormulario() {
  this.isLoading = true;

  this._registroAdministrativo.getOneRegistroAdmin(this.id).subscribe({
    next: (data: any) => {
      this.isLoading = false;
      this.datos = data.registro[0];

      if (this.datos != undefined) {
        this.form.get('gradoCursar')?.setValue(this.datos.RegA_GradoCursar);

        const metodoPagoBD = this.datos.RegA_MetodoPago;
        if (this.MetodoPago && metodoPagoBD) {
          const match = this.MetodoPago.find((p: any) => p.idMetodoPago == metodoPagoBD);
          if (match) {
            this.form2.get('metedoPago')?.setValue(match.idMetodoPago);
          } else {
            this.form2.get('metedoPago')?.setValue('');
          }
        }

        this.form.get('mesInscripcion')?.setValue(this.datos.RegA_MesInscripcion);

        this.form.get('planPago')?.setValue(this.datos.RegA_PlanPagos);


        const beca = (this.datos.RegA_BecaCurso || '').toLowerCase();
        if (beca === 'si' || beca === 'no') {
          this.form.get('becaCurso')?.setValue(beca.charAt(0).toUpperCase() + beca.slice(1));
        } else {
          this.form.get('becaCurso')?.setValue('');
        }

        this.form.get('becaPorcentaje')?.setValue(this.datos.RegA_BecaPorcentaje);

        const requiereFactura = this.datos.RegA_RequiereFactura?.toLowerCase() || 'no';
        this.form2.get('factura')?.setValue(requiereFactura);

        this.facturaDataOriginal = {
          metodoPago: this.datos.RegA_MetodoPago,
          RFC: this.datos.RegA_RfcFactura,
          razonSocial: this.datos.RegA_NombreFactura,
          domicilio: this.datos.RegA_DireccionFactura,
          correo: this.datos.RegA_CorreoFactura,
          cuenta: this.datos.RegA_CuentaPago,
          archivo: this.datos.RegA_ConstanciaFiscal,
        };

        if (requiereFactura === 'si') {
          this.form2.get('metedoPago')?.setValue(this.facturaDataOriginal.metodoPago || '', { emitEvent: false });
          this.form2.get('RFCFactura')?.setValue(this.facturaDataOriginal.RFC || '', { emitEvent: false });
          this.form2.get('razonSocial')?.setValue(this.facturaDataOriginal.razonSocial || '', { emitEvent: false });
          this.form2.get('correoFactura')?.setValue(this.facturaDataOriginal.correo || '', { emitEvent: false });
          this.form2.get('cuentaPago')?.setValue(this.facturaDataOriginal.cuenta || '', { emitEvent: false });

          if (this.datos.RegA_DireccionFactura && this.datos.RegA_DireccionFactura.trim() !== '') {
            this.form2.get('domicilioFactura')?.setValue(this.datos.RegA_DireccionFactura, { emitEvent: false });
          } else {
            this.autocompletarDomicilio();
          }

          if (this.datos.RegA_ConstanciaFiscal && this.datos.RegA_ConstanciaFiscal.trim() !== '') {
            this.rutaArchivo = this.datos.RegA_ConstanciaFiscal;
            this.rutaArchivoOriginal = this.datos.RegA_ConstanciaFiscal;
            this.form2.get('constanciaFiscal')?.setValue(this.datos.RegA_ConstanciaFiscal, { emitEvent: false });
          }
        }

        this.factura({ value: requiereFactura });
        this.cdr.detectChanges();
      }
    },
    error: (err) => {
      this.isLoading = false;
      console.error('Error al cargar formulario:', err);
      Swal.fire('Error', 'No se pudo cargar el formulario', 'error');
    }
  });



}

factura(event: any) {
  const requiereFactura = event.value; // Valor seleccionado: 'si' o 'no'

  // Detecta si hubo un cambio real respecto al valor anterior
  const cambioReal = this.valorFacturaAnterior !== null && this.valorFacturaAnterior !== requiereFactura;
  this.valorFacturaAnterior = requiereFactura;

  // Opciones para el template (ngIf, ngClass, etc.)
  this.opcionRequiereFaturaSi = requiereFactura === 'si';
  this.opcionRequiereFaturaNO = requiereFactura === 'no';

  // Si hubo un cambio real y se había eliminado el archivo previamente
  if (cambioReal && this.archivoEliminado) {
    this.obtenerDatosDesdeBD(); // Recarga los datos originales de la BD
    this.archivoEliminado = false;
  }

  // ========== CASO: NO REQUIERE FACTURA ==========
  if (requiereFactura === 'no') {
    // Limpiar validadores
    this.form2.get('domicilioFactura')?.clearValidators();
    this.form2.get('correoFactura')?.clearValidators();
    this.form2.get('razonSocial')?.clearValidators();
    this.form2.get('RFCFactura')?.clearValidators();
    this.form2.get('metedoPago')?.clearValidators();

    // Establecer valores por defecto
    this.form2.get('metedoPago')?.setValue('NA');
    this.form2.get('RFCFactura')?.setValue('NA');
    this.form2.get('razonSocial')?.setValue('NA');
    this.form2.get('domicilioFactura')?.setValue('NA');
    this.form2.get('correoFactura')?.setValue('NA');
    this.form2.get('cuentaPago')?.setValue('NA');

    // Limpiar archivo si no existe o fue eliminado
    if (this.archivoEliminado || !this.rutaArchivo || this.rutaArchivo.trim() === '') {
      this.form2.get('constanciaFiscal')?.setValue('');
      this.rutaArchivo = '';
      this.rutaArchivoOriginal = '';
    }

    // Deshabilitar campos
    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();
    this.form2.get('constanciaFiscal')?.disable();

  // ========== CASO: REQUIERE FACTURA ==========
  } else {
    // Habilitar campos
    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();
    this.form2.get('constanciaFiscal')?.enable();

    // Restaurar valores originales desde facturaDataOriginal
    this.form2.get('metedoPago')?.setValue(this.facturaDataOriginal?.metodoPago || '', { emitEvent: false });
    this.form2.get('RFCFactura')?.setValue(this.facturaDataOriginal?.RFC || '', { emitEvent: false });
    this.form2.get('razonSocial')?.setValue(this.facturaDataOriginal?.razonSocial || '', { emitEvent: false });
    this.form2.get('domicilioFactura')?.setValue(this.facturaDataOriginal?.domicilio || '', { emitEvent: false });
    this.form2.get('correoFactura')?.setValue(this.facturaDataOriginal?.correo || '', { emitEvent: false });
    this.form2.get('cuentaPago')?.setValue(this.facturaDataOriginal?.cuenta || '', { emitEvent: false });
    this.form2.get('becaCurso')?.setValue(this.facturaDataOriginal?.cuenta || '', { emitEvent: false });

if (this.facturaDataOriginal?.archivo) {
  this.rutaArchivo = this.facturaDataOriginal.archivo;

  const nombreLimpio = this.getNombreLimpioArchivo(this.rutaArchivo);
  this.form2.get('constanciaFiscal')?.setValue(nombreLimpio, { emitEvent: false });
}


    this.form2.get('domicilioFactura')?.setValidators([Validators.required]);
    this.form2.get('correoFactura')?.setValidators([
      Validators.required,
      Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$')
    ]);
    this.form2.get('razonSocial')?.setValidators([Validators.required]);
    this.form2.get('RFCFactura')?.setValidators([Validators.required]);
    this.form2.get('metedoPago')?.setValidators([Validators.required]);
    this.form2.get('constanciaFiscal')?.setValidators([Validators.required]);
  }

  // Asegurarse de limpiar el campo constanciaFiscal si es 'NA'
  if (this.form2.get('constanciaFiscal')?.value === 'NA') {
    this.form2.get('constanciaFiscal')?.setValue('');
    this.rutaArchivo = '';
    this.rutaArchivoOriginal = '';
  }

  // Actualizar validez de todos los campos
  this.form2.get('domicilioFactura')?.updateValueAndValidity();
  this.form2.get('correoFactura')?.updateValueAndValidity();
  this.form2.get('razonSocial')?.updateValueAndValidity();
  this.form2.get('RFCFactura')?.updateValueAndValidity();
  this.form2.get('metedoPago')?.updateValueAndValidity();
  this.form2.get('constanciaFiscal')?.updateValueAndValidity();

  // Detectar cambios para refrescar la UI
  this.cdr.detectChanges();
}


    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;

  // Suscripción para colores
  this._enviarInfo.currentTextColor.subscribe(textColor => {
    this.textColor = textColor;
  });
  this._enviarInfo.currentColor.subscribe(color => {
    this.color = color;
  });

  // Obtener ID del alumno desde la ruta y asignar al form
  this.route.paramMap.subscribe(params => {
    const id = params.get('id');
    this.id = atob(id || '');
    this.form.get('idAlumno')?.setValue(this.id);

    // Traer datos del alumno
    this._registro.getOne(this.id).subscribe((data: any) => {
      if (data && data.length > 0) {
        this.dataAlum = data;
        this.nombreAlumno = data[0].nombreUsuario;

        // Traer todos los grados educativos
        this._gradosEducativos.getAll().subscribe((grados: any) => {
          if (grados && grados.length > 0) {
            // Buscar el idNivel del grado del alumno
            const gradoAlumno = this.dataAlum[0].grado;
            const gradoEncontrado = grados.find((g: any) => g.nombreGrado === gradoAlumno);
            idNivel = gradoEncontrado ? gradoEncontrado.idNivel : null;

            // Filtrar grados según idNivel
            this.GradoCursar = grados.filter((g: any) => g.idNivel === idNivel);

            // Traer planes de pago filtrados por idNivel
            this._registroAdministrativo.getPlanPago().subscribe((planes: any) => {
              if (planes && planes.planPago) {
                this.planPago = planes.planPago.filter((p: any) => p.idNivelPlanPago === idNivel);
                console.log("Planes de pago filtrados:", this.planPago);
              }
            });
          }
        });

      } else {
        console.warn("No llegaron datos del alumno");
        this.dataAlum = [];
      }
    });

  });

  // Traer porcentaje de beca
  this._registroAdministrativo.getPorcentajeBeca().subscribe((data: any) => {
    this.porcentaje = data?.porcentajeBeca || 0;
  });

  // Traer métodos de pago (solo una suscripción)
  this._registroAdministrativo.getMetodoPago().subscribe((data: any) => {
    this.MetodoPago = data?.metodoPago || [];
    console.log("Métodos de pago:", this.MetodoPago);
  });

  // Cargar formulario con datos existentes si los hay
  this.obtenerDatosDesdeBD();

  // Detectar cambios en el formControl 'factura'
  this.form2.get('factura')?.valueChanges.subscribe((valor: string) => {
    if (this.archivoEliminado && valor === 'Sí') {
      this.obtenerDatosDesdeBD();
      this.archivoEliminado = false;
    }
  });
}



obtenerDatosDesdeBD() {
  this._registroAdministrativo.getOneRegistroAdmin(this.id).subscribe((data: any) => {
    this.datos = data.registro[0];

    if (this.datos?.RegA_ConstanciaFiscal) {
      this.rutaArchivo = this.datos.RegA_ConstanciaFiscal.replace('COLEGIOABC/','');

    } else {
      this.rutaArchivo = '';
    }

    this.cargarFormulario();

    this.facturaDataOriginal = {
      rfc: this.datos.RegA_Rfc || '',
      razonSocial: this.datos.RegA_RazonSocial || '',
      usoCfdi: this.datos.RegA_UsoCFDI || '',
      regimenFiscal: this.datos.RegA_RegimenFiscal || '',
      correoFactura: this.datos.RegA_CorreoFactura || '',
      constanciaFiscal: this.datos.RegA_ConstanciaFiscal || ''
    };
  });
}


getNombreLimpioArchivo(rutaArchivo: string | null): string {
  if (!rutaArchivo) return '';

  // Obtener solo la última parte después de los '/'
  const nombreCompleto = rutaArchivo.split('/').pop() || '';

  return nombreCompleto;
}



autocompletarDomicilio() {
  const domicilio = `${this.dataAlum[0].calle}, ${this.dataAlum[0].colonia}, ${this.dataAlum[0].cp}`;
  this.form2.get('domicilioFactura')?.setValue(domicilio);
}

private limpiarErroresValidacion() {

  Object.keys(this.form2.controls).forEach(key => {
    const control = this.form2.get(key);
    if (control) {
      control.markAsUntouched();
      control.markAsPristine();
    }
  });
}
onFacturaChange() {
  const requiereFactura = this.form2.get('requiereFactura')?.value;

  if (requiereFactura === 'Sí') {
    this.form2.get('rfc')?.enable();
    this.form2.get('razonSocial')?.enable();
    this.form2.get('usoCfdi')?.enable();
    this.form2.get('regimenFiscal')?.enable();
    this.form2.get('correoFactura')?.enable();
    this.form2.get('constanciaFiscal')?.enable();

    if (this.facturaDataOriginal) {
      this.form2.patchValue({
        rfc: this.facturaDataOriginal.rfc || '',
        razonSocial: this.facturaDataOriginal.razonSocial || '',
        usoCfdi: this.facturaDataOriginal.usoCfdi || '',
        regimenFiscal: this.facturaDataOriginal.regimenFiscal || '',
        correoFactura: this.facturaDataOriginal.correoFactura || '',
        constanciaFiscal: this.facturaDataOriginal.constanciaFiscal || ''
      });

      this.rutaArchivo = this.facturaDataOriginal.constanciaFiscal || '';
    }

  } else if (requiereFactura === 'No') {
    this.form2.get('rfc')?.disable();
    this.form2.get('razonSocial')?.disable();
    this.form2.get('usoCfdi')?.disable();
    this.form2.get('regimenFiscal')?.disable();
    this.form2.get('correoFactura')?.disable();
    this.form2.get('constanciaFiscal')?.disable();
  }
}

async guardarFormulario() {

  this.limpiarErroresValidacion();

  const requiereFactura = this.form2.get('factura')?.value;

  if (requiereFactura === 'si') {
    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();
  }


  if (this.form.invalid || this.form2.invalid) {

    this.form.markAllAsTouched();
    this.form2.markAllAsTouched();

    const errores: string[] = [];
    Object.keys(this.form.controls).forEach(key => {
      if (this.form.get(key)?.invalid) {
        errores.push(`Formulario General - ${key}: ${JSON.stringify(this.form.get(key)?.errors)}`);
      }
    });
    Object.keys(this.form2.controls).forEach(key => {
      if (this.form2.get(key)?.invalid) {
        errores.push(`Formulario Facturación - ${key}: ${JSON.stringify(this.form2.get(key)?.errors)}`);
      }
    });

    Swal.fire('Error de validación', 'Por favor, complete todos los campos requeridos correctamente.', 'error');
    return;
  }
  // === Obtener nombre del grado seleccionado ===
  const gradoSeleccionado = this.form.get('gradoCursar')?.value;
  let nombreGrado = '';
  if (gradoSeleccionado) {
    // Si guardaste el objeto {id, nombre}
    nombreGrado = gradoSeleccionado.nombre;
    // Si solo guardaste el nombre directo, simplemente:
    // nombreGrado = gradoSeleccionado;
  }
  try {
    const requiereFactura = this.form2.get('requiereFactura')?.value;

    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();

    const formularioCompleto: any = {
      ...this.form.getRawValue(),
      ...this.form2.getRawValue(),
       gradoCursar: nombreGrado,
      idEscuela: 'COLEGIOABC'
    };


    if (requiereFactura === 'no') {
      formularioCompleto.domicilioFactura = 'NA';
      formularioCompleto.correoFactura = 'NA';
      formularioCompleto.razonSocial = 'NA';
      formularioCompleto.RFCFactura = 'NA';
      formularioCompleto.metedoPago = 'NA';
    }

    const formData = new FormData();
    for (const key in formularioCompleto) {
      if (formularioCompleto[key] !== null && formularioCompleto[key] !== undefined) {
        formData.append(key, formularioCompleto[key]);
      }
    }

    if (this.selectedFile) {
      formData.append('constanciaFiscal', this.selectedFile, this.selectedFile.name);
    }

    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();


    this._registroAdministrativo.getOneRegistroAdmin(this.id).subscribe((data: any) => {
      const idAlumno = this.form.get('idAlumno')?.value;

      if (data.registro && data.registro.length > 0) {
        this._registroAdministrativo.actualizarRegistroAdministrativo(formData, idAlumno).subscribe(
          (res: any) => {
Swal.fire({
  title: 'Actualización exitosa',
  text: data.mensaje,
  icon: 'success',
  confirmButtonColor: '#4074b0',
});            this._router.navigate(['/homePadres/registroAlumno']);
          },
          (error) => {
            Swal.fire('Error', 'No se pudo actualizar el registro', 'error');
          }
        );
      } else {

        this._registroAdministrativo.crearRegistroAdministrativo(formData).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');
          }
        );
      }
    });

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

    if (requiereFactura !== 'si') {
      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();
    }
  }

Swal.fire({
  title: ' ',
  html: `
    <div style="
      overflow: hidden;
      padding: 0;
    ">
      <svg xmlns="http://www.w3.org/2000/svg"
        viewBox="0 0 1366 768"
        style="width: 190px; height: 220px; margin-bottom: -40px; margin-top:-50px;">
        <path d="M495.7 130.2c-12.1-2.1-14.2-22.5 2.8-24.4h368.8c15.9-.5 18.7 19.8 4.2 24.5h-30.8c.3 98.1-49.6 174.6-114 242.6-6.5 9.8-4.5 16.3 2.1 25 64.1 65 112.4 146.1 111.9 240.4H873c7.8 0 13 19.1-1 23.4-123.8 1.8-248 .5-372.1 1-14.2 0-19.2-18.9-5.7-24.4h32.3c-.5-94.3 47.8-175.6 111.9-240.5 6.6-8.7 8.6-15.2 2.1-25-64.3-67.9-114.4-144.5-114-242.6-9.3-1.1-22 1.6-30.8 0zm320.6 2.9H550.9c.8 68.4 26.5 127.9 68.9 180 15 18.5 49.2 47.5 48.8 71.7-.4 23.3-36.8 55-51.7 73.3-40.9 50.5-65.3 111.5-66 177.2h265.4c.9-160.5-127.4-201.2-115.2-263.7 5.7-18.7 45.9-56.2 59.9-75 34.4-46.6 54.3-105.5 55.3-163.5z"
          fill="#F58027" />
        <path d="M797.7 615.2H569.5c6.9-49.3 23.6-96.5 53.9-136.2 19.4-25.4 46.5-47.2 60.1-76.2 11.2 25.3 34.4 44.5 51.7 66 35.1 43.5 55.4 90.5 62.5 146.4zM753.2 273.7c-16.7 33-54.8 57.3-69.6 91.8-16.2-34.9-50.6-59.2-71-91.8h140.6z"
          fill="#F58027" />
      </svg>
      <h2 style="color: #F58027; font-size: 26px; font-weight: normal; margin-top: -20px;">Guardando...</h2>
    </div>
  `,
  showConfirmButton: false,
  allowOutsideClick: false,
  allowEscapeKey: false,
  customClass: {
    popup: 'no-scroll-popup',
  }
});



}




Asistente() {
  const domicilioActual = this.form2.get('domicilioFactura')?.value || '';

  const asistente = this.dialog.open(Asistente, {
    data: domicilioActual
  });

  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,
  private _registroAdministrativo: RegistroAcademicoService
  ) {
        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
    }
}

