import { Devoir } from "../classes/devoir";
import { Cours } from "../classes/cours";
import { Travail } from "../models/travail";

export class DevoirControleur {
  public recupererDevoir(cours: Cours, devoir_id: string) {
    return cours.getTravaux().find((travail) => travail.id === devoir_id);
  }
  
  public recupererListeDevoir(cours: Cours) {
    return cours
    .getTravaux()
    .map((travail) => (travail.type === "DEVOIR" ? travail : undefined));
  }

  
  public recupererTousDevoir(cours: Cours[]) {
    const devoirMap: Map<Devoir, Cours> = new Map();
    cours.forEach((c) => {
      c.getTravaux().forEach((t) => {
        if (t.type === "DEVOIR") {
          devoirMap.set(t as Devoir, c);
        }
      });
    });
    return devoirMap;
  }
  
  public retirerDevoir(cours: Cours, devoir_id: string) {
    return cours.retirerTravail(devoir_id);
  }
  
  public ajouterDevoir(cours: Cours, devoir: Devoir) {
    if (cours.getTravaux().find((t) => (t as Devoir).nom === devoir.nom)) {
      return false;
    } else {
      cours.ajouterTravail(devoir);
      return true;
    }
    
  }
  
  public modifierDevoir(cours: Cours, devoir: Devoir, devoir_id: string) {
    // check if a devoir with the same name already exists
    if (cours.getTravaux().find((t) => (t as Devoir).nom === devoir.nom)) {
      return undefined;
    } else {
      return cours.setTravail(devoir as Travail, devoir_id);;
    }
  }
}
