export const server_types = {
    UNSUPPORTED: "unsupported",
    MASTODON: "mastodon",
    GLITCHSOC: "glitchsoc",
    CHUCKYA: "chuckya",
    FIREFISH: "firefish",
    ICESHRIMP: "iceshrimp",
    SHARKEY: "sharkey",
};

export const capabilities = {
    MARKDOWN_CONTENT: "mdcontent",
    REACTIONS: "reactions",
};

export class Instance {
    host;
    version;
    capabilities;
    type = server_types.UNSUPPORTED;

    constructor(host, version) {
        this.host = host;
        this.version = version;
        this.#setType(version);
        this.capabilities = this.#getCapabilities(this.type);
    }

    #setType(version) {
	this.type = server_types.UNSUPPORTED;
        if (version.constructor !== String) return;
        let version_lower = version.toLowerCase();
        for (let i = 1; i < Object.keys(server_types).length; i++) {
            const check_type = Object.values(server_types)[i];
            if (version_lower.includes(check_type)) {
                this.type = check_type;
		return;
            }
        }
    }

    #getCapabilities(type) {
        let c = [];
        switch (type) {
            case server_types.MASTODON:
                break;
            case server_types.GLITCHSOC:
                c.push(capabilities.REACTIONS);
                break;
            case server_types.CHUCKYA:
                c.push(capabilities.REACTIONS);
                break;
            case server_types.FIREFISH:
                c.push(capabilities.REACTIONS);
                break;
            case server_types.ICESHRIMP:
                // more trouble than it's worth atm
                // the server already hands this to us ;p
                //c.push(capabilities.MARKDOWN_CONTENT);
                c.push(capabilities.REACTIONS);
                break;
            case server_types.SHARKEY:
                c.push(capabilities.REACTIONS);
                break;
            default:
                break;
        }
        return c;
    }
}
