import { Component, OnInit } from "@angular/core";
import { Router } from '@angular/router';

import { EnumEx } from "jalhyd";

import { CalculatorType, FormulaireDefinition } from "../../formulaire/formulaire-definition";
import { FormulaireService } from "../../services/formulaire/formulaire.service";
import { InternationalisationService } from '../../services/internationalisation/internationalisation.service';

class ListElement {
    private _label: string;

    constructor(private _type: CalculatorType, formulaireService: FormulaireService) {
        this._label = formulaireService.getLocalisedTitleFromCalculatorType(_type);
    }

    public get label() { return this._label }
    public get type() { return this._type }
}

@Component({
    selector: "list",
    templateUrl: "./calculator-list.component.html",
    styleUrls: ["./calculator-list.component.css"]
})
export class CalculatorListComponent implements OnInit {
    private _items: ListElement[];

    constructor(
        private formulaireService: FormulaireService,
        private router: Router,
        private intlService: InternationalisationService,
    ) {
        this.intlService.addObserver(this);
    }

    private updateLocale() {
        this._items = [];
        for (let t of EnumEx.getValues(CalculatorType))
            this._items.push(new ListElement(t, this.formulaireService));
    }

    private create(t: CalculatorType) {
        const p: Promise<FormulaireDefinition> = this.formulaireService.createFormulaire(t);
        p.then(f => {
            this.router.navigate(['/calculator', f.uid]);
        });
    }

    // interface Observer

    update(sender: any, data: any): void {
        if (sender instanceof InternationalisationService) {
            this.updateLocale();
        }
    }

    // OnInit

    ngOnInit() {
        this.updateLocale();
    }
}