import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
import {AnalysisService} from '../../analysis.service';

@Component({
  selector: 'app-launch-analysis',
  templateUrl: './launch-analysis.component.html',
  styleUrls: ['./launch-analysis.component.scss']
})
export class LaunchAnalysisComponent implements OnInit {

  @Input()
  public show = false;
  @Output()
  public showChange = new EventEmitter<boolean>();

  public algorithm: 'dummy' | 'trustrank' | 'keypathwayminer' | 'multisteiner';

  // Trustrank Parameters
  public trustrankStrain = 'SARS_CoV2';
  public trustrankDampingFactor = 0.85;
  public trustrankResultSize = 20;
  public trustrankNumThreads = 1;
  public trustrankDatasets = [];
  public trustrankIgnoredEdgeTypes = [];

  // Keypathwayminer Parameters
  public keypathwayminerK = 1;

  // Multisteiner Parameters
  public multisteinerStrain = 'SARS_CoV2';
  public multisteinerNumTrees = 5;


  constructor(public analysis: AnalysisService) {
  }

  ngOnInit(): void {
  }

  public close() {
    this.show = false;
    this.showChange.emit(this.show);
  }

  public async startTask() {
    const parameters: any = {
      proteins: this.analysis.getSelection().map((protein) => protein.proteinAc),
    };

    if (this.algorithm === 'dummy') {
      // No parameters for dummy
    } else if (this.algorithm === 'trustrank') {
      parameters.strain = this.trustrankStrain;
      parameters.datasets = [];
      parameters.ignored_edge_types = [];
      parameters.damping_factor = this.trustrankDampingFactor;
      parameters.result_size = this.trustrankResultSize;
      parameters.num_threads = this.trustrankNumThreads;
    } else if (this.algorithm === 'keypathwayminer') {
      // TODO
    } else if (this.algorithm === 'multisteiner') {
      parameters.strain = this.multisteinerStrain;
      parameters.num_trees = this.multisteinerNumTrees;

    }

    await this.analysis.startAnalysis(this.algorithm, parameters);
  }

}