// angular
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
// libs
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs/Observable';
// app
import { LoopUserService } from './loop-user.service';
import { EmployeeService } from './employee.service';
import { LoopActivityService } from './loop-activity.service';
import { LoopTrendingActivityService } from './loop-trending-activity.service';
import { LoopActivityMessageService } from './loop-activity-message.service';
import { LoopAssignmentService } from './loop-assignment.service';
import { LoopScenarioService } from './loop-scenario.service';
import { LoopTopicService } from './loop-topic.service';
import { LoopDocumentService } from './loop-document.service';
import { LoopSessionService } from './loop-session.service';
import { MediaService } from './media-service.service';

@Injectable()
export class CoreService {

    search$: Observable<string>;

    private _searchSource: BehaviorSubject<string> = new BehaviorSubject<string>('');

    constructor(
        public http: Http,
        public activityMessages: LoopActivityMessageService,
        public users: LoopUserService,
        public assignments: LoopAssignmentService,
        public scenarios: LoopScenarioService,
        public topics: LoopTopicService,
        public documents: LoopDocumentService,
        public sessions: LoopSessionService,
        public employees: EmployeeService,
        public activities: LoopActivityService,
        public trendingActivities: LoopTrendingActivityService,
        public media: MediaService) {
            this.search$ = this._searchSource.asObservable();
        }

    onSearch(searchPhrase: string) {
        this._searchSource.next(searchPhrase);
    }

    get config() {
        return this.http.get('ma_core/api/v2/configuration').map(res => res.json());
    }

    get uuid(): string {
        var d = new Date().getTime();
        if(window.performance && typeof window.performance.now === 'function') {
            d += performance.now();
        }
        var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            var r = (d + Math.random()*16)%16 | 0;
            d = Math.floor(d/16);
            return (c === 'x' ? r : (r&0x3|0x8)).toString(16);
        });
        return uuid;
    }

}

