import { Component, OnInit, ViewChild } from "@angular/core";
import { MatPaginator } from "@angular/material/paginator";
import { MatTableDataSource } from "@angular/material/table";
import { MatDialog } from "@angular/material/dialog";

import { GearService } from "../../services/gear.service";
import { ServiceComm } from "../../services/service-comm.service";
import { GearResp } from "../../models/gear";
import { AddAction } from "../../models/add-action.enum";
import { NewGearComponent } from "../new-gear/new-gear.component";

@Component({
  selector: "app-list-of-gears",
  templateUrl: "./list-of-gears.component.html",
  styleUrls: ["./list-of-gears.component.css"]
})
export class ListOfGearsComponent implements OnInit {
  public displayedColumns: Array<string> = [
    "name",
    "manufacturer",
    "maxSize",
    "aad",
    "mainCanopy",
    "reserveCanopy"
  ];
  public dataSourceTable: MatTableDataSource<GearResp>;
  public resultsLength = 0;
  @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;

  constructor(private serviceApi: GearService,
              private serviceComm: ServiceComm,
              public dialog: MatDialog) {}

  ngOnInit() {
    this.serviceComm.refreshRequest.subscribe(action => {
      if (action === AddAction.Gear) {
        this.dialog.closeAll();
        this.getListOfGears();
      }
    });
    this.serviceComm.UpdatedComponentTitle("List of gears");
    this.getListOfGears();
  }

  getListOfGears() {
    this.serviceApi.getListOfGears()
                   .subscribe(data => {
      setTimeout(() => {
        data.sort((a, b) => b.id - a.id);
        this.dataSourceTable = new MatTableDataSource<GearResp>(data);
        this.dataSourceTable.paginator = this.paginator;
        this.resultsLength = data.length;
      }, 500);
    });
  }

  openDialogToAdd() {
    this.dialog.open(NewGearComponent, {
      height: "400px",
      width: "600px"
    });
  }
}
