import type {Room} from "../Connexion/Room";

export enum GameConnexionTypes {
    anonymous=1,
    organization,
    register,
    empty,
    unknown,
}

//this class is responsible with analysing and editing the game's url
class UrlManager {

    //todo: use that to detect if we can find a token in localstorage
    public getGameConnexionType(): GameConnexionTypes {
        const url = window.location.pathname.toString();
        if (url.includes('_/')) {
            return GameConnexionTypes.anonymous;
        } else if (url.includes('@/')) {
            return GameConnexionTypes.organization;
        } else if(url.includes('register/')) {
            return GameConnexionTypes.register;
        } else if(url === '/') {
            return GameConnexionTypes.empty;
        } else {
            return GameConnexionTypes.unknown;
        }
    }

    public getOrganizationToken(): string|null {
        const match = /\/register\/(.+)/.exec(window.location.pathname.toString());
        return match ? match [1] : null;
    }

    public pushRoomIdToUrl(room:Room): void {
        if (window.location.pathname === room.id) return;
        const hash = window.location.hash;
        const search = room.search.toString();
        history.pushState({}, 'WorkAdventure', room.id+(search?'?'+search:'')+hash);
    }

    public getStartLayerNameFromUrl(): string|null {
        const hash = window.location.hash;
        return hash.length > 1 ? hash.substring(1) : null;
    }

    pushStartLayerNameToUrl(startLayerName: string): void {
        window.location.hash = startLayerName;
    }
}

export const urlManager = new UrlManager();
