import { Injectable } from '@angular/core';
import {Task} from "../Interfaces/task.interface";
import {Subject} from "rxjs";
import {ApiService} from "./api.service";

@Injectable({
  providedIn: 'root'
})
export class TaskService{
  taskSubject: Subject<any> = new Subject<any>()

  constructor(private apiService: ApiService) { }

  private generatePoints(min: number, max: number): number {
    return Math.floor(Math.random() * (max+1 - min) ) + min;
  }

  generateTask(data: Task): void{
    let points: number = 0;
    switch (data.type){
      case 'green':
        points = this.generatePoints(1,3)
        break;
      case 'blue':
        points = this.generatePoints(2,4)
        break;
      case 'red':
        points = this.generatePoints(5,7)
    }
    const returnData: Task = {
      title: data.title,
      type: data.type,
      description: data.description,
      score: points,
      date: data.date
    }
    this.apiService.storeCard(returnData).subscribe({
      next: (data: Task): void => {
        this.fetchAllTasks()
      }
    })
  }

  fetchAllTasks(): void{
    this.apiService.getAllCards().subscribe({
      next: (data: any): void => {
        this.taskSubject.next(data)
      }
    })
  }

  sortTodaysCards(type: string): Task[]{
    const filteredTasks: Task[] = [];
    this.apiService.getTodaysTasks().subscribe({
      next: (data: Task[]): void => {
        data.forEach((task: Task): void=>{
          if(task.type===type){
            filteredTasks.push(task)
          }
        })
      }
    })
    return filteredTasks
  }
}
