import {Component, Input, OnChanges, SimpleChanges} from '@angular/core';
import {AboutComponent} from "../../about/about.component";
import {MatTab, MatTabGroup} from "@angular/material/tabs";
import {MatCard, MatCardContent} from "@angular/material/card";
import {AppStateService} from "../../../../state_management/services/app-state.service";
import {filter, map} from "rxjs";
import {DatasetComponent} from "../../datasets/dataset/dataset.component";
import {AsyncPipe, NgForOf, NgIf} from "@angular/common";
import {SubmissionsComponent} from "../../submissions/submissions.component";
import {LeaderboardComponent} from "../../leaderboards/leaderboard/leaderboard.component";
import {LeaderboardsComponent} from "../../leaderboards/leaderboards.component";
import {DatasetsComponent} from "../../datasets/datasets.component";

@Component({
  selector: 'app-task',
  standalone: true,
  imports: [
    AboutComponent,
    MatTabGroup,
    MatTab,
    MatCard,
    MatCardContent,
    DatasetComponent,
    NgForOf,
    AsyncPipe,
    SubmissionsComponent,
    LeaderboardComponent,
    LeaderboardsComponent,
    NgIf,
    DatasetsComponent
  ],
  templateUrl: './task.component.html',
  styleUrl: './task.component.css'
})
export class TaskComponent implements OnChanges {

  @Input() task: string = '';

  datasets: any;

  constructor(
    private state: AppStateService
  ) {
    this.updateDatasets();
  }

  ngOnChanges(changes: SimpleChanges): void {
    if (changes['task']) {
      this.updateDatasets();
    }
  }

  private updateDatasets() {
    this.datasets = this.state.state$.pipe(
      map(state => state.datasets.filter(dataset => dataset.task === this.task))
    );
  }
}