/********************************************************************************
 * Copyright © 2018 Mettenmeier GmbH.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 ********************************************************************************/
import { Component, OnInit, OnDestroy, Injector } from '@angular/core';

import { AGGRID_LOCALETEXT, ListUtil } from '@shared/utils/list.util';
import { Subscription } from 'rxjs';
import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
import { PlanningService } from '@schedule/services/planning.service';
import { Router } from '@angular/router';
import { ArchiveObject } from '@shared/model/ArchiveObject';
import { Validators } from '@angular/forms';
import { AbstractFormComponent } from '@shared/abstract/abstract-form/abstract-form.component';
import { FormUtil } from '@shared/utils/form.util';

@Component({
  selector: 'ok-archivelist',
  templateUrl: './archivelist.component.html',
  styleUrls: ['./archivelist.component.scss']
})
export class ArchivelistComponent extends AbstractFormComponent implements OnInit, OnDestroy {
  columnDefs = [
    { headerName: 'Ebene', field: 'statusName' },
    { headerName: 'Titel', field: 'title' },
    { headerName: 'Kommentar', field: 'comment' },
    { headerName: 'Bearbeiter', field: 'modifiedBy' },
    {
      headerName: 'Startdatum', field: 'validFrom', filter: 'agDateColumnFilter', valueFormatter: ListUtil.formatDate,
      filterParams: {
        comparator: ListUtil.compareDates
      }
    },
    {
      headerName: 'Enddatum', field: 'validTo', filter: 'agDateColumnFilter', valueFormatter: ListUtil.formatDate,
      filterParams: {
        comparator: ListUtil.compareDates
      }
    },
    { headerName: 'Bearbeitungsgrund', field: 'modifiedCause' },
    {
      headerName: 'Änderungsdatum', field: 'modificationDate', filter: 'agDateColumnFilter', valueFormatter: ListUtil.formatDateWithTime,
      filterParams: {
        comparator: ListUtil.compareDates
      }
    }
  ];
  localeText = AGGRID_LOCALETEXT;

  rowData = [];
  archiveData$: Subscription;
  modalRef: NgbModalRef;
  formUtil = FormUtil;

  constructor(
    private planningService: PlanningService,
    private injector: Injector
  ) {
    super(injector);
  }

  ngOnInit() {
    this.createForm();
  }

  createForm() {
    this.form = this.fb.group({
      dateIndex: ['', Validators.required]
    });
  }

  onGridReady(params) {
    this.getArchiveData();
    params.api.sizeColumnsToFit();
  }

  getArchiveData() {
    this.archiveData$ = this.planningService.getArchiveData().subscribe((res: ArchiveObject[]) => {
      this.rowData = res;
    });
  }

  rowClicked(event) {
    this.router.navigate(['planung/archiv', event.data.id]);
  }

  search() {
    if (FormUtil.validate(this.form)) {
      const formValue = this.form.getRawValue();
      FormUtil.formatDates(formValue, ['dateIndex']);
      this.planningService.searchArchiveData(formValue).subscribe((searchRes) => {
        this.rowData = searchRes;
      });
    }
  }

  clear() {
    this.form.reset();
    this.getArchiveData();
  }

  ngOnDestroy() {
    if (this.archiveData$) {
      this.archiveData$.unsubscribe();
    }
  }

}
