import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';
import { DefaultColorType, Dossier, DossierStats } from '@red/domain';
import { DefaultColorsService } from '@services/entity-services/default-colors.service';
import { BehaviorSubject, Observable, switchMap } from 'rxjs';

@Component({
    selector: 'redaction-dossier-workload-column',
    templateUrl: './dossier-workload-column.component.html',
    styleUrls: ['./dossier-workload-column.component.scss'],
    changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DossierWorkloadColumnComponent implements OnChanges {
    @Input() dossier: Dossier;
    @Input() dossierStats: DossierStats;

    readonly suggestionColor$: Observable<string>;
    readonly hintColor$: Observable<string>;
    readonly redactionColor$: Observable<string>;

    readonly #dossierTemplateId$ = new BehaviorSubject<string>(null);

    constructor(private readonly _defaultColorsService: DefaultColorsService) {
        this.suggestionColor$ = this.#dossierTemplateId$.pipe(
            switchMap(dossierTemplateId => this.#getColor$(dossierTemplateId, 'requestAddColor')),
        );
        this.hintColor$ = this.#dossierTemplateId$.pipe(switchMap(dossierTemplateId => this.#getColor$(dossierTemplateId, 'hintColor')));
        this.redactionColor$ = this.#dossierTemplateId$.pipe(
            switchMap(dossierTemplateId => this.#getColor$(dossierTemplateId, 'redactionColor')),
        );
    }

    ngOnChanges(changes: SimpleChanges): void {
        if (changes.dossier) {
            this.#dossierTemplateId$.next(this.dossier.dossierTemplateId);
        }
    }

    #getColor$(dossierTemplateId: string, colorType: DefaultColorType): Observable<string> {
        return this._defaultColorsService.getColor$(dossierTemplateId, colorType);
    }
}
