/// <reference path="./twitter-text.d.ts" />

import * as twitter from "twitter-text";

const text: string = twitter.htmlEscape("@you #hello < @world > https://github.com");
const entities = twitter.extractEntitiesWithIndices(text);

function isHashtagEntity(e: twitter.EntityWithIndices): e is twitter.HashtagWithIndices {
    return "hashtag" in e;
}

function isUrlEntity(e: twitter.EntityWithIndices): e is twitter.UrlWithIndices {
    return "url" in e;
}

function isMentionEntity(e: twitter.EntityWithIndices): e is twitter.MentionWithIndices {
    return "screenName" in e;
}

function isCashtagEntity(e: twitter.EntityWithIndices): e is twitter.CashtagWithIndices {
    return "cashtag" in e;
}

for (let e of entities) {
    e = twitter.modifyIndicesFromUnicodeToUTF16(e);
    if (isHashtagEntity(e)) {
        console.log("hashtag: ", e.hashtag);
    } else if (isUrlEntity(e)) {
        console.log("url: ", e.url);
    } else if (isMentionEntity(e)) {
        console.log("screenName: ", e.screenName);
    } else if (isCashtagEntity(e)) {
        console.log("cashtag: ", e.cashtag);
    } else {
        console.error("Unreachable");
    }
    console.log(`indices: (${e.indices[0]}, ${e.indices[1]})`);
}

let result: string;
result = twitter.autoLink(text);
result = twitter.autoLinkUsernamesOrLists(text);
result = twitter.autoLinkHashtags(text);
result = twitter.autoLinkCashtags(text);
result = twitter.autoLinkUrlsCustom(text);

const len: number = twitter.getTweetLength(text);

const linked: string = twitter.autoLink("link @user, and expand url... http://t.co/0JG5Mcq", {
    urlEntities: [
        {
            url: "http://t.co/0JG5Mcq",
            display_url: "blog.twitter.com/2011/05/twitte…",
            expanded_url: "http://blog.twitter.com/2011/05/twitter-for-mac-update.html",
            indices: [
                30,
                48
            ]
        }
    ]});

const usernames: string[] = twitter.extractMentions("Mentioning @twitter and @jack");
