import { Router } from '@angular/router';
import { Injectable } from '@angular/core';
import { Store } from '@ngrx/store';

import { ResourceSelector } from './resource-selector';
import { HypermediaState } from '../reducers';
import { ReflectiveModelBinderFactory } from '../../models/services/reflective-model-binder';
import { ReflectiveQueryMatcherFactory } from '../../models/services/reflective-query-matcher';

@Injectable()
export class HypermediaStore {
    constructor(private router: Router,
                private store: Store<{ hypermedia: HypermediaState}>,
                private modelBinderFactory: ReflectiveModelBinderFactory,
                private queryMatcherFactory: ReflectiveQueryMatcherFactory) { }

    select(path: string, scope: string = 'local', authorize = true, tokenOverride?: string): ResourceSelector {
        return new ResourceSelector(
            path, scope, authorize, tokenOverride,
            this.store,
            this.modelBinderFactory,
            this.queryMatcherFactory
        );
    }

    selectCurrent(scope: string = 'local', authorize = true, tokenOverride?: string): ResourceSelector {
        return this.select(this.router.url, scope, authorize, tokenOverride);
    }
}
