/**
 * This file is part of Anis Client.
 *
 * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';

import { combineLatest, Observable } from 'rxjs';
import { map } from 'rxjs/operators';

import { Store, select } from '@ngrx/store';

import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector';
import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector';

@Injectable({
    providedIn: 'root'
})
export class SearchTitleResolver implements Resolve<string> {
    constructor(private store: Store<{ }>) { }

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): string | Observable<string> | Promise<string> {
        if (route.paramMap.keys.length === 0) {
            return this.store.select(instanceSelector.selectInstanceByRouteName).pipe(
                map(instance => `${instance.label} - Search - Select a dataset`)
            );
        } else {
            const step = route.component.name.replace('Component', '');
            return combineLatest([
                this.store.pipe(select(instanceSelector.selectInstanceByRouteName)),
                this.store.pipe(select(datasetSelector.selectDatasetByRouteName))
            ]).pipe(
                map(([instance, dataset]) => `${instance.label} - Search ${dataset.label} - ${step}`)
            );
        }
    }
}