import { Injectable } from '@angular/core'
import { HttpClient } from '@angular/common/http'

// Helpers
import { HelperService } from './svc.helper'
import { SharedService } from './svc.shared'
import { CacheService } from '@k-services/general/svc.cache'

import { PageType } from '../types/page'

@Injectable()
export class PageService {
    
    pageTitle: string

    constructor(
        private _helper: HelperService,
        private _shared: SharedService,
        private _http: HttpClient,
        private _cache: CacheService
    ) { }


    // ---- Variables ---- \\
    private credentials = this._helper.credentials;
    private api = this._helper.server+'feed/get';




    // ---- Functions ---- \\

    /**
     * A very simple error handler
     * @param error 
     * 
     * TODO: change to a proper error handler
     */
    private handleError(error: any): Promise<any> {
        console.error('An error occurred', error)
        return Promise.reject(error.message || error)
    }


    /**
     * Will get page based on `urlkey`. 
     * If page has already been called a cached version will be returned
     * 
     * @param urlkey 
     * 
     * @returns promise
     */
    getPageContent(urlkey:string): Promise<PageType> {

        let cachedPage = this._cache.get('page-' + urlkey)

        
        return new Promise((resolve, reject) => {
            // Cache
            if(cachedPage) {
                let page = cachedPage

                // Set the title
                this._shared.setPage(page.title)
                
                // Resolve cached page
                resolve(page)
            }
            // Server
            else {

                this._http.get(this.api + '/page' + this.credentials + '&urlkey=' + urlkey)
                .toPromise()
                .then((response: any) => {


                    // Set the title
                    this._shared.setPage(response.data.page.title)

                    // Set cache value and resolve
                    let page: PageType = response.data.page
                    this._cache.set('page-' + urlkey, page)
                    resolve(page)
                })
                .catch(this.handleError)
            }
        })
    }

}