/**
 * 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 { Component, OnInit } from '@angular/core';

import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';

import * as attributeActions from 'src/app/metamodel/actions/attribute.actions';
import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector';
import { AppConfigService } from 'src/app/app-config.service';
import { Attribute } from 'src/app/metamodel/models';
import * as instanceSelector from "../../../metamodel/selectors/instance.selector";
import * as attributeSelector from "../../../metamodel/selectors/attribute.selector";

@Component({
    selector: 'app-documentation',
    templateUrl: 'documentation.component.html',
    styleUrls: ['../documentation.component.scss']
})
/**
 * @class
 * @classdesc Documentation container.
 *
 * @implements OnInit
 */
export class DocumentationComponent implements OnInit {
    public instanceSelected: Observable<string>;
    public datasetSelected: Observable<string>;
    public attributeListIsLoading: Observable<boolean>;
    public attributeListIsLoaded: Observable<boolean>;
    public attributeList: Observable<Attribute[]>;

    constructor(private store: Store<{ }>, private config: AppConfigService) {
        this.instanceSelected = store.select(instanceSelector.selectInstanceNameByRoute);
        this.datasetSelected = store.select(datasetSelector.selectDatasetNameByRoute);
        this.attributeListIsLoading = store.select(attributeSelector.selectAttributeListIsLoading);
        this.attributeListIsLoaded = store.select(attributeSelector.selectAttributeListIsLoaded);
        this.attributeList = store.select(attributeSelector.selectAllAttributes);
    }

    ngOnInit() {
        this.store.dispatch(attributeActions.loadAttributeList());
    }

    /**
     * Returns strict url address.
     *
     * @return string
     */
    getUrlServer(): string {
        if (!this.config.apiUrl.startsWith('http')) {
            const url = window.location;
            return url.protocol + '//' + url.host + this.config.apiUrl;
        }
        return this.config.apiUrl;
    }
}