import { BlockUI, NgBlockUI } from 'ng-block-ui';
import { AuthService } from '../auth/auth.service';
import { Injectable } from '@angular/core';
import { UNotificationControl } from '../interface/Interactive Component/UNotificationControl';
import { Router } from '@angular/router';

@Injectable()
export class RouteHandleService {
    @BlockUI() blockUI: NgBlockUI;
    public Url: string;

    constructor(private authService: AuthService
        , public routerNav?: Router) {

    }

    checkifisroutehandling(component: UNotificationControl) {

        const soid = localStorage.getItem('selectedObjectId');
        if (soid != null && soid != '') {
            const f = this.getocCode();
            this.authService.changeSelectedOc(f);
            component.selectedObjectId = soid;
            component.NotificationControl();
            this.stopblockUi();
            this.clearsoid();
        } else {
            this.stopblockUi();
        }
        this.clearurl();
    }

    showblockUi() {
        this.blockUI.start('Redirecting...');

    }
    stopblockUi() {
        this.blockUI.stop();

    }
    isUrlExist(): boolean {
        const url = localStorage.getItem('redirecturl');
        return (url != null);
    }
    seturl(url: string, soid: string, occode: string) {
        localStorage.setItem('redirecturl', url);
        localStorage.setItem('selectedObjectId', soid);
        localStorage.setItem('ocCode', occode);
    }

    geturl() {
        const url = localStorage.getItem('redirecturl');
        if (url != null) {
            localStorage.removeItem('redirecturl');
            return url;
        } else {
            return '';
        }
    }

    getocCode() {

        const occode = localStorage.getItem('ocCode');
        if (occode != null) {
            localStorage.removeItem('ocCode');


            return occode;
        } else {
            return '';
        }
    }

    clearurl() {
        const url = localStorage.getItem('redirecturl');
        if (url != null) {
            localStorage.removeItem('redirecturl');
        }

    }
    clearsoid() {
        const soid = localStorage.getItem('selectedObjectId');
        if (soid != null && soid != '') {
            localStorage.removeItem('selectedObjectId');
        }
    }

    isRedirectDetailsExist(): boolean {
        const url = localStorage.getItem('redirectfullUrl');
        return (url != null);
    }

    setRedirectDetails(fullUrl: string, url: string, count: number) {
        console.log('setRedirectDetails start', fullUrl);
        localStorage.setItem('redirectfullUrl', fullUrl);
        localStorage.setItem('redirecturl', url);
        localStorage.setItem('redirectcount', count.toString());
        sessionStorage.setItem('sfullUrl', fullUrl);
        console.log('setRedirectDetails end', url);
    }

    getRedirectDetails() {
        try {
            console.log('getRedirectDetails start', this.routerNav.url);

            const sfullUrl = sessionStorage.getItem('sfullUrl');
            console.log('getRedirectDetails sfullUrl', sfullUrl);

            const fullUrl = localStorage.getItem('redirectfullUrl');
            const url = localStorage.getItem('redirecturl');
            const count = localStorage.getItem('redirectcount');
            console.log('getRedirectDetails count', count);

            if (fullUrl !== null && url !== null && count !== null) {
                const no = parseInt(count, 10);
                if (no <= 1) {
                    localStorage.removeItem('redirectfullUrl');
                    localStorage.removeItem('redirecturl');
                    localStorage.removeItem('redirectcount');
                } else {
                    localStorage.setItem('redirectcount', (no - 1).toString());
                }
                const fullUrls = JSON.parse(fullUrl);
                const urls = JSON.parse(url);
                const result = { fullUrl: fullUrls[no - 1], url: urls[no - 1], count: no };
                console.log('getRedirectDetails', result);
                return result;
            } else {
                return null;
            }
        } catch (error) {
            console.log('getRedirectDetails error', error);
            return null;
        }
    }

    setRedirectDetail(key: string, object: any) {
        const objStr = JSON.stringify(object);
        sessionStorage.removeItem(key);
        sessionStorage.setItem(key, objStr);
        console.log('setRedirectDetail end');
    }

    getRedirectDetail(key: string): any {
        console.log('getRedirectDetail start', this.routerNav.url);

        const objStr = sessionStorage.getItem(key);
        console.log('getRedirectDetail objStr', objStr);

        if (!objStr || objStr === null) { return null; }

        const object = JSON.parse(objStr);
        return object;
    }

}
