import {Component, ElementRef, inject, Inject, OnInit, ViewChild} from '@angular/core';
import {MatOption, provideNativeDateAdapter} from '@angular/material/core';
import {MatTableModule} from '@angular/material/table';
import { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle, MAT_DIALOG_DATA, MatDialogRef } from "@angular/material/dialog";
import {JsonPipe, NgForOf, NgIf} from "@angular/common";
import {Observable} from "rxjs";
import {MatFormField, MatLabel,MatFormFieldModule } from "@angular/material/form-field";
import {FormControl, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms";
import {MatIconModule} from '@angular/material/icon';
import {MatDividerModule} from '@angular/material/divider';
import {MatButtonModule} from '@angular/material/button';
import {MatCard, MatCardContent} from "@angular/material/card";
import {MatInput} from "@angular/material/input";
import {MatSelect} from "@angular/material/select";
import {SoloNumerosDirective} from "../../../service/directivas_service/soloNumeros/solo-numeros.directive";
import Notiflix from "notiflix";
import {MatSnackBar, MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition} from "@angular/material/snack-bar";


interface listadoComun {
  codigo: string;
  nombre: string;
}

@Component({
  selector: 'app-modalArticuloOC',
  standalone: true,
  providers: [provideNativeDateAdapter()],
  templateUrl: './modalArticuloOC.componente.html',
  imports: [
    MatDialogActions,
    MatDialogClose,
    MatDialogContent,
    JsonPipe,
    MatLabel,
    ReactiveFormsModule,
    MatFormField,
    MatDialogTitle,
    MatTableModule,
    MatButtonModule,
    MatDividerModule,
    MatIconModule,
    MatCard,
    MatCardContent,
    MatInput,
    MatOption,
    MatSelect,
    NgForOf,
    NgIf,
    SoloNumerosDirective,
    MatFormFieldModule
  ],
})
export class modalArticuloOC {

  //INICIALIZANDO VARIABLES
  private barraAlerta = inject(MatSnackBar);
  alertaPosicionHorizontal: MatSnackBarHorizontalPosition = 'center';
  alertaPosicionVertical: MatSnackBarVerticalPosition = 'bottom';
  alertaDuracion : number = 3;
  Estados : listadoComun[] = [];
  Unidades : listadoComun[] = [];
  Articulo : any = {};
  Editar : boolean = false;

  datos_Articulo = new FormGroup({
    nombreArticulo : new FormControl<string>('' ,Validators.required),
    unidadArticulo : new FormControl<string>('' ,Validators.required),
    cantidadArticulo :  new FormControl<number | null >(null,Validators.required),
    estadoArticulo : new FormControl<string>('' ,Validators.required)
  });

  constructor(@Inject(MAT_DIALOG_DATA) public data: any ,public dialogRef: MatDialogRef<modalArticuloOC>) {

    this.Estados = data.Estados;
    this.Unidades = data.Unidades;
    this.Articulo = data.DatoArticulo || {};
    this.Editar = data.Editar || false;

    if(this.Editar){
      this.datos_Articulo.get('nombreArticulo')?.setValue(this.Articulo.nombre);
      this.datos_Articulo.get('unidadArticulo')?.setValue(this.Articulo.unidad);
      this.datos_Articulo.get('cantidadArticulo')?.setValue(this.Articulo.cantidad);
      this.datos_Articulo.get('estadoArticulo')?.setValue(this.Articulo.estado);
    }
  }

  onCancelar(): void {
    this.Articulo = {Editar: this.Editar, Cancelado : true};
    this.dialogRef.close(this.Articulo);
  }

  onConfirmar(): void {

    this.Articulo = {
      Cancelado : false,
      codigoArticulo : '',
      nombreArticulo : this.datos_Articulo.get('nombreArticulo')?.value,
      unidadArticulo : this.datos_Articulo.get('unidadArticulo')?.value,
      cantidadArticulo : this.datos_Articulo.get('cantidadArticulo')?.value,
      estadoArticulo : this.datos_Articulo.get('estadoArticulo')?.value
    }

    const validacion = this.validarRegistroArticulo(this.Articulo) ;

    if(validacion){
      this.dialogRef.close(this.Articulo);
    }else{
      this.mostrarAlerta('VALIDAR DATOS INGRESADOS');
      return;
    }

  }

  validarRegistroArticulo(valores: any): boolean {

    if (valores.nombreArticulo && valores.unidadArticulo && valores.cantidadArticulo && valores.estadoArticulo) {
      return true;
    } else {
      return false;
    }
  }

  mostrarAlerta(mensaje: string): void {

    Notiflix.Loading.remove();
    this.barraAlerta.open(mensaje, '', {
      horizontalPosition: this.alertaPosicionHorizontal,
      verticalPosition: this.alertaPosicionVertical,
      duration: this.alertaDuracion * 1000,
      panelClass: ['custom-snackbar'],
    });

  }
}