import { Injectable } from '@angular/core';
import { EntitiesService } from '@iqser/common-ui';
import { ILegalBasis, Justification } from '@red/domain';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

@Injectable({
    providedIn: 'root',
})
export class JustificationsService extends EntitiesService<ILegalBasis, Justification> {
    protected readonly _defaultModelPath = 'legalBasis';
    protected readonly _entityClass = Justification;

    createOrUpdate(justification: Justification, dossierTemplateId: string) {
        return this._put(justification, `${this._defaultModelPath}/${dossierTemplateId}`);
    }

    loadAll(dossierTemplateId: string): Observable<Justification[]> {
        return super.loadAll(`${this._defaultModelPath}/${dossierTemplateId}`);
    }

    delete(justificationNames: string[], dossierTemplateId: string): Observable<unknown> {
        return this._post(justificationNames, `${this._defaultModelPath}/${dossierTemplateId}/delete`);
    }

    getForDossierTemplate(dossierTemplateId: string): Observable<Justification[]> {
        return super
            .getAll(`${this._defaultModelPath}/${dossierTemplateId}`)
            .pipe(map((entities: ILegalBasis[]) => entities.map(entity => new Justification(entity))));
    }
}
