import { Injectable } from '@angular/core';
import { FranvaroOrsaksKodEnum } from '@msfa-enums/franvaro-orsak-kod.enum';
import { ContactInformationCompact } from '@msfa-models/api/contact-information.response.model';
import { Avvikelse } from '@msfa-models/avvikelse.model';
import { FragorForAvvikelser } from '@msfa-models/fragor-for-avvikelser.model';
import { OrsaksKoderAvvikelse } from '@msfa-models/orsaks-koder-avvikelse.model';
import { KandaAvvikelseKoder, OrsaksKoderFranvaro } from '@msfa-models/orsaks-koder-franvaro.model';
import { AvvikelseApiService } from '@msfa-services/api/avvikelse-api.service';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class DeltagareAvvikelseService {

  constructor(private avvikelseApiService: AvvikelseApiService) { }

  public getOrsaksKoderFranvaro$(): Observable<OrsaksKoderFranvaro[]> {
    return this.avvikelseApiService.getOrsaksKoderFranvaro$()
      .pipe(
        map((orsaksKoder: OrsaksKoderFranvaro[]) => this.sortOrsaksKoder(orsaksKoder))
      )
  }

  public getOrsaksKoderAvvikelse$(): Observable<OrsaksKoderAvvikelse[]> {
    return this.avvikelseApiService.getOrsaksKoderAvvikelse$();
  }

  public getAndraKandaOrsaker$(): Observable<KandaAvvikelseKoder[]> {
    return this.avvikelseApiService.getAndraKandaOrsaker$();
  }

  public getFragorForAvvikelser$(): Observable<FragorForAvvikelser[]> {
    return this.avvikelseApiService.getFragorForAvvikelser$();
  }

  public createAvvikelse$(avvikelse: Avvikelse, alternative: string): Observable<Avvikelse> {
    return this.avvikelseApiService.createAvvikelse$(avvikelse, alternative);
  }

  public getContactInformationCompact$(id: number): Observable<ContactInformationCompact> {
    return this.avvikelseApiService.getContactInformation$(id);
  }

  private sortOrsaksKoder(orsaksKoder: OrsaksKoderFranvaro[]): OrsaksKoderFranvaro[] {
    orsaksKoder.map(orsak => {
      if (+orsak.value == FranvaroOrsaksKodEnum.Sjuk) {
        orsak.index = 1;
      }
      if (+orsak.value == FranvaroOrsaksKodEnum.Arbete) {
        orsak.index = 3;
      }
      if (+orsak.value == FranvaroOrsaksKodEnum.OkandOrsak) {
        orsak.index = 6;
      }
      if (+orsak.value == FranvaroOrsaksKodEnum.AnnanKandOrsak) {
        orsak.index = 5;
      }
      if (+orsak.value == FranvaroOrsaksKodEnum.VAB) {
        orsak.index = 2;
      }
      if (+orsak.value == FranvaroOrsaksKodEnum.Utbildning) {
        orsak.index = 4;
      }
    })

    const sortedOrsaksKoder = orsaksKoder.sort((kodA, kodB) => kodA.index < kodB.index ? -1 : 1);
    return sortedOrsaksKoder;
  }

}

