import {Component} from '@angular/core';
import {ActivatedRoute} from '@angular/router';

import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {ZenodoInformationClass} from "../openaireLibrary/deposit/utils/zenodoInformation.class";
import {FetchZenodoInformation} from "./utils/fetchZenodoInformation.class";
import {ZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service";
import {CommunityService} from "../openaireLibrary/connect/community/community.service";
import {SearchZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service";
import {PiwikHelper} from "../utils/piwikHelper";
import {Subscriber, Subscription} from "rxjs";
import {properties} from "../../environments/environment";

@Component({
  selector: 'openaire-deposit',
  template: `
    <deposit-first-page [piwikSiteId]=piwikSiteId [zenodoInformation]="zenodoInformation"
			[communityId]="communityId" [assetsPath]="'assets/connect-assets'"></deposit-first-page>
  `
})

export class OpenaireDepositComponent {
  properties: EnvProperties = properties;
  piwikSiteId = null;
  public pageContents = null;
  public divContents = null;
  public communityId = null;
  
  public zenodoInformation: ZenodoInformationClass = new ZenodoInformationClass();
  fetchZenodoInformation: FetchZenodoInformation;
  
  subs: Subscription[] = [];
  
  constructor(private  route: ActivatedRoute,
              private _zenodoCommunitieService: ZenodoCommunitiesService,
              private _communityService: CommunityService,
              private _searchZenodoCommunitiesService: SearchZenodoCommunitiesService) {
    this.fetchZenodoInformation = new FetchZenodoInformation(this._zenodoCommunitieService, this._searchZenodoCommunitiesService);
  }
  
  public ngOnInit() {
    this.subs.push(this._communityService.getCommunityAsObservable().subscribe(
      community => {
        if(community) {
          this.piwikSiteId = PiwikHelper.getSiteId(this.communityId);
          this.communityId = community.communityId
          let masterZenodoCommunityId = community.zenodoCommunity;
          if (masterZenodoCommunityId) {
            this.zenodoInformation.shareInZenodoUrl = this.properties.shareInZenodoPage;
          } else {
            this.zenodoInformation.url = this.properties.zenodo;
            this.zenodoInformation.name = "Zenodo";
          }
        }
      }));
    if (!this.zenodoInformation.shareInZenodoUrl) {
      this.zenodoInformation.url = this.properties.zenodo;
    }
    if (!this.zenodoInformation.name) {
      this.zenodoInformation.name = "Zenodo";
    }
  }
  
  public ngOnDestroy() {
    for (let sub of this.subs) {
      if (sub instanceof Subscriber) {
        sub.unsubscribe();
      }
    }
    this.fetchZenodoInformation.clearSubscriptions();
  }
  
  private handleError(message: string, error) {
    console.error("Deposit First Page: " + message, error);
  }
}
