import { ApiService } from './../../../../../core/api/api.service';
import {ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';
import {FormBuilder, FormControl, FormGroup, Validators} from "@angular/forms";
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from "@angular/material/dialog";

@Component({
	selector: 'kt-modal-filtros-servicios-cliente',
	templateUrl: './modal-filtros-servicios-cliente.component.html',
	styleUrls: ['./modal-filtros-servicios-cliente.component.scss']
})
export class ModalFiltrosServiciosClienteComponent implements OnInit {

	form: FormGroup;
	loading: boolean = false;
	sucursales = null;
	usuarios = [];
	origenes = null;
	startDate = null;

	addDays = (date: Date, days: number): Date => {
		let result = new Date(date);
		result.setDate(result.getDate() + days);
		return result;
	};

	constructor(private fb: FormBuilder,
				public dialog: MatDialog,
				public dialogRef: MatDialogRef<ModalFiltrosServiciosClienteComponent>,
				private api: ApiService,
				private cdr: ChangeDetectorRef,
				@Inject(MAT_DIALOG_DATA) public data: any) {

		this.initLoginForm();
		this.filtros();
	}

	ngOnInit() {}

	initLoginForm() {
		let fechaInicio = this.data? this.addDays(new Date(this.data.fecha_inicio+'T00:00:00.000Z'), 1) : null;
		let fechaFinal = this.data? this.addDays(new Date(this.data.fecha_final+'T00:00:00.000Z'), 1) : null;
		let sucursal = this.data? this.data.sucursal : null;
		let cliente_id = this.data? this.data.cliente_id : null;

		this.form = this.fb.group({
			sucursal: new FormControl({value: sucursal, disabled: true}, [Validators.required]),
			fecha_inicio: new FormControl({value: fechaInicio, disabled: false}, [Validators.required]),
			fecha_final: new FormControl({value: fechaFinal, disabled: false}, [Validators.required]),
			cliente_id: new FormControl({value: cliente_id, disabled: true}, [Validators.required]),
		});
	}

	setFilters(){
		let data = this.form.value;
		data.fecha_inicio = new Date(data.fecha_inicio).toLocaleDateString('en-CA');
		data.fecha_final = new Date(data.fecha_final).toLocaleDateString('en-CA');

		let user = this.searchUserById(data.cliente_id);
		data.user = user.denominacion;

		this.dialogRef.close(data);
	}

	filtros(){
		this.loading = true;
		this.api.reportesService.filtros('sucursales').subscribe(res => {
			this.form.controls['sucursal'].enable();

			this.sucursales = res.data;

			if(this.data)
				this.getUsers(true);

			this.loading = false;
		}, () => {
			this.loading = false;
		});
	}

	dateChanged(dateModal: any){
		if(dateModal){
			this.startDate = this.form.value.fecha_inicio;
			this.form.get('fecha_final').reset();
			dateModal.open();
		}

		this.getUsers();
	}

	getUsers(reOpen = false){
		let sucursal = this.form.value.sucursal;
		let fechaInicio = this.form.value.fecha_inicio;
		let fechaFinal = this.form.value.fecha_final;

		if(sucursal && fechaInicio && fechaFinal){
			this.changeStatusInputs(false);
			this.loading = true;
			this.usuarios = [];

			if(!reOpen)
				this.form.get('cliente_id').reset();

			let data = this.form.value;
			data.fecha_inicio = new Date(data.fecha_inicio).toLocaleDateString('en-CA');
			data.fecha_final = new Date(data.fecha_final).toLocaleDateString('en-CA');

			this.api.reportesService.getInformation('servicios/clientes/usuarios', data).subscribe(res => {
				this.usuarios = res.data;
				this.changeStatusInputs(true);
				this.loading = false;
				this.cdr.detectChanges();
			}, () => {
				this.changeStatusInputs(true);
				this.loading = false;
			});
		}
	}

	changeStatusInputs(enable){
		if(enable){
			this.form.controls['sucursal'].enable();
			this.form.controls['fecha_inicio'].enable();
			this.form.controls['fecha_final'].enable();
			this.form.controls['cliente_id'].enable();
		}else{
			this.form.controls['sucursal'].disable();
			this.form.controls['fecha_inicio'].disable();
			this.form.controls['fecha_final'].disable();
			this.form.controls['cliente_id'].disable();
		}
	}

	searchUserById(valor){
		let index = this.usuarios.findIndex((user => valor == user.id));
		if(index != -1){
			return this.usuarios[index];
		}
		return false;
	}
}
