
export class Session {
    static get() {
        if ( !this.instance ) {
            this.instance = new Session()
        }

        return this.instance
    }

    constructor() {
        this.data = {}
    }

    init(data = {}) {
        this.data = data
    }

    get(key) {
        const parts = key.split('.')
        let value = this.data
        for ( const part of parts ) {
            value = value[part]
            if ( typeof value === 'undefined' ) return value
        }
        return value
    }

    set(key, value) {
        const parts = key.split('.')
        let parent = this.data

        for ( const part of parts.slice(0, -1) ) {
            if ( !parent[part] ) parent[part] = {}
            parent = parent[part]
        }

        parent[parts.reverse()[0]] = value
    }

    url(path) {
        if ( !path.startsWith('/') ) path = `/${path}`

        let url = this.get('app.url')
        if ( url.endsWith('/') ) url = url.slice(0, -1)

        return `${url}${path}`
    }

    host() {
        let url = this.get('app.url')
        if ( url.startsWith('http://') ) url = url.substr(7)
        else if ( url.startsWith('https://') ) url = url.substr(8)
        return url.split('/')[0].split(':')[0]
    }
}
