import {Component, OnDestroy, OnInit, ViewChild} from "@angular/core";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder";
import { Subscription, zip} from "rxjs";
import {EditStakeholderComponent} from "./edit-stakeholder/edit-stakeholder.component";
import {properties} from "../../environments/environment";
import {Title} from "@angular/platform-browser";

@Component({
  selector: 'general',
  templateUrl: "./general.component.html"
})
export class GeneralComponent implements OnInit, OnDestroy {

  public stakeholder: Stakeholder;
  public alias: string[];
  public properties: EnvProperties = properties;
  public defaultStakeholders: Stakeholder[];
  public loading: boolean = false;
  private subscriptions: any[] = [];
  @ViewChild('editStakeholderComponent') editStakeholderComponent: EditStakeholderComponent;

  constructor(private stakeholderService: StakeholderService,
              private title: Title) {
  }

  ngOnInit() {
    this.loading = true;
    this.subscriptions.push(this.stakeholderService.getStakeholderAsObservable().subscribe(stakeholder => {
      this.stakeholder = stakeholder;
      if(this.stakeholder) {
        this.title.setTitle(this.stakeholder.name + " | General");
        let data = zip(
          this.stakeholderService.getDefaultStakeholders(this.properties.monitorServiceAPIURL),
          this.stakeholderService.getAlias(this.properties.monitorServiceAPIURL)
        );
        this.subscriptions.push(data.subscribe(res => {
          this.defaultStakeholders = res[0];
          this.alias = res[1];
          this.reset();
          this.loading = false;
        }));
      }
    }));
  }

  public reset() {
    this.editStakeholderComponent.init(this.stakeholder, this.alias, this.defaultStakeholders, this.stakeholder.defaultId == null, false)
  }


  public save() {
    this.loading = true;
    this.editStakeholderComponent.save((stakeholder) => {
      this.stakeholder = stakeholder;
      this.stakeholderService.setStakeholder(this.stakeholder);
      this.reset();
      this.loading = false;
    }, (error) => {
      this.loading = false;
    });
  }

  ngOnDestroy() {
    this.subscriptions.forEach(subscription => {
      if(subscription instanceof Subscription) {
        subscription.unsubscribe();
      }
    });
  }
}
