/**
 * Copyright 2017 The Mifos Initiative.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {Error} from '../../../../../services/domain/error.model';
import {TdStepComponent} from '@covalent/core';
import {FimsValidators} from '../../../../../common/validator/validators';

export interface IdentityCardScanFormData {
  identifier: string;
  description: string;
  file: File;
}

@Component({
  selector: 'fims-identity-card-scan-form',
  templateUrl: './scan.form.component.html'
})
export class IdentificationCardScanComponent implements OnInit {

  @ViewChild('detailsStep') detailsStep: TdStepComponent;

  form: FormGroup;

  @Input() editMode: boolean;

  @Input() set error(error: Error) {
    if (!error) {
      return;
    }

    this.form.get('identifier').setErrors({
      'unique': true
    });
  }

  @Output() onSave = new EventEmitter<IdentityCardScanFormData>();

  @Output() onCancel = new EventEmitter<void>();

  constructor(private formBuilder: FormBuilder) {}

  ngOnInit() {
    this.form = this.formBuilder.group({
      identifier: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(32), FimsValidators.urlSafe]],
      description: ['', [Validators.required, Validators.maxLength(1024)]],
      file: ['', [Validators.required, FimsValidators.maxFileSize(512)]]
    });

    this.detailsStep.open();
  }

  save(): void {
    this.onSave.emit(this.form.getRawValue());
  }

  cancel(): void {
    this.onCancel.emit();
  }
}
