import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';
import {LoanModel} from '../models/loan.model';
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
import {ListAllLoansComponent} from '../list-all-loans/list-all-loans.component';

@Component({
  selector: 'app-loan-select',
  templateUrl: './loan-select.component.html',
  styleUrls: ['./loan-select.component.scss'],
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      multi: true,
      useExisting: LoanSelectComponent
    }
  ]
})
export class LoanSelectComponent implements OnInit, ControlValueAccessor {
  @ViewChild('list', {static: false} ) list: ListAllLoansComponent;
  @Input() Max = 1; // we do not support multiple loan selection at the moment
  @Input() readOnly = false;
  @Output() valueChange: EventEmitter<LoanModel> = new EventEmitter<LoanModel>();
  public Loan: LoanModel; // for multiple selection ,it has to be array; we don't support it now.

  // popup
  public showPopup = false;
  public Offset = { left: 10, top: 48 };

  // formControl state
  private disabled = false;
  private touched = false;

  // Control Value Accessor
  onChange = (Loan) => {}; // empty
  onTouched = () => {};

  constructor() {  }

  ngOnInit(): void {
    console.log('init loan-select', this);
  }

  writeValue(loan: LoanModel): void {
    this.Loan = loan;
  }

  registerOnChange(onChange: any): void {
    this.onChange = onChange;
  }

  registerOnTouched(onTouched: any): void {
    this.onTouched = onTouched;
  }

  private markAsTouched(): void {
    if (!this.touched) {
      this.onTouched();
      this.touched = true;
    }
  }

  onLoanSelected(loan: LoanModel): void {
    if (this.Loan.Id !== loan.Id){
      this.valueChange.emit(loan);
      this.onChange(loan);
      this.Loan = loan;
    }
    this.Loan = loan;
    this.markAsTouched();
    this.onTouched();

    this.showPopup = false;
  }


  public onToggle(): void {
    this.showPopup = !this.showPopup;
  }

}
