#pragma once

#include <QStringList>

namespace chatterino {

QStringList getValidLinks()
{
    return {
        R"(http://github.com/)",
        R"(https://github.com/)",
        R"(http://username@github.com/)",
        R"(https://username@github.com/)",
        R"(http://pajlada.github.io)",
        R"(https://pajlada.github.io)",
        R"(http://pajlada.github.io/)",
        R"(https://pajlada.github.io/)",
        R"(http://github.com/some/random/path)",
        R"(https://github.com/some/random/path)",
        R"(http://github.com?query=value)",
        R"(https://github.com?query=value)",
        R"(http://github.com?query=value&abc=123)",
        R"(https://github.com?query=value&abc=123)",
        R"(http://github.com/?query=value&abc=123&yhf=abc_def)",
        R"(http://github.com/?query=value&abc=123&yhf)",
        R"(http://github.com?query=value&abc=)",
        R"(http://github.com?query=value&abc=)",
        R"(http://github.com/#block)",
        R"(https://github.com/#anchor)",
        R"(http://github.com/path/?qs=true#block)",
        R"(https://github.com/path/?qs=true#anchor)",
        R"(github.com/)",
        R"(username@github.com/)",
        R"(pajlada.github.io)",
        R"(pajlada.github.io/)",
        R"(github.com/some/random/path)",
        R"(github.com?query=value)",
        R"(github.com?query=value&abc=123)",
        R"(github.com/?query=value&abc=123&yhf=abc_def)",
        R"(github.com/?query=value&abc=123&yhf)",
        R"(github.com?query=value&abc=)",
        R"(github.com?query=value&abc=)",
        R"(github.com/#block)",
        R"(github.com/path/?qs=true#block)",
        R"(HTTP://GITHUB.COM/)",
        R"(HTTPS://GITHUB.COM/)",
        R"(HTTP://USERNAME@GITHUB.COM/)",
        R"(HTTPS://USERNAME@GITHUB.COM/)",
        R"(HTTP://PAJLADA.GITHUB.IO)",
        R"(HTTPS://PAJLADA.GITHUB.IO)",
        R"(HTTP://PAJLADA.GITHUB.IO/)",
        R"(HTTPS://PAJLADA.GITHUB.IO/)",
        R"(HTTP://GITHUB.COM/SOME/RANDOM/PATH)",
        R"(HTTPS://GITHUB.COM/SOME/RANDOM/PATH)",
        R"(HTTP://GITHUB.COM?QUERY=VALUE)",
        R"(HTTPS://GITHUB.COM?QUERY=VALUE)",
        R"(HTTP://GITHUB.COM?QUERY=VALUE&ABC=123)",
        R"(HTTPS://GITHUB.COM?QUERY=VALUE&ABC=123)",
        R"(HTTP://GITHUB.COM/?QUERY=VALUE&ABC=123&YHF=ABC_DEF)",
        R"(HTTP://GITHUB.COM/?QUERY=VALUE&ABC=123&YHF)",
        R"(HTTP://GITHUB.COM?QUERY=VALUE&ABC=)",
        R"(HTTP://GITHUB.COM?QUERY=VALUE&ABC=)",
        R"(HTTP://GITHUB.COM/#BLOCK)",
        R"(HTTPS://GITHUB.COM/#ANCHOR)",
        R"(HTTP://GITHUB.COM/PATH/?QS=TRUE#BLOCK)",
        R"(HTTPS://GITHUB.COM/PATH/?QS=TRUE#ANCHOR)",
        R"(GITHUB.COM/)",
        R"(USERNAME@GITHUB.COM/)",
        R"(PAJLADA.GITHUB.IO)",
        R"(PAJLADA.GITHUB.IO/)",
        R"(GITHUB.COM/SOME/RANDOM/PATH)",
        R"(GITHUB.COM?QUERY=VALUE)",
        R"(GITHUB.COM?QUERY=VALUE&ABC=123)",
        R"(GITHUB.COM/?QUERY=VALUE&ABC=123&YHF=ABC_DEF)",
        R"(GITHUB.COM/?QUERY=VALUE&ABC=123&YHF)",
        R"(GITHUB.COM?QUERY=VALUE&ABC=)",
        R"(GITHUB.COM?QUERY=VALUE&ABC=)",
        R"(GITHUB.COM/#BLOCK)",
        R"(GITHUB.COM/PATH/?QS=TRUE#BLOCK)",
        R"(http://foo.com/blah_blah)",
        R"(http://foo.com/blah_blah/)",
        R"(http://foo.com/blah_blah_(wikipedia))",
        R"(http://foo.com/blah_blah_(wikipedia)_(again))",
        R"(http://www.example.com/wpstyle/?p=364)",
        R"(https://www.example.com/foo/?bar=baz&inga=42&quux)",
        R"(http://✪df.ws/123)",
        R"(http://userid@example.com)",
        R"(http://userid@example.com/)",
        R"(http://userid@example.com:8080)",
        R"(http://userid@example.com:8080/)",
        R"(http://142.42.1.1/)",
        R"(http://142.42.1.1:8080/)",
        R"(http://➡.ws/䨹)",
        R"(http://⌘.ws)",
        R"(http://⌘.ws/)",
        R"(http://foo.com/blah_(wikipedia)#cite-1)",
        R"(http://foo.com/blah_(wikipedia)_blah#cite-1)",
        R"(http://foo.com/unicode_(✪)_in_parens)",
        R"(http://foo.com/(something)?after=parens)",
        R"(http://☺.damowmow.com/)",
        R"(http://code.google.com/events/#&product=browser)",
        R"(http://j.mp)",
        R"(ftp://foo.bar/baz)",
        R"(http://foo.bar/?q=Test%20URL-encoded%20stuff)",
        R"(http://مثال.إختبار)",
        R"(http://例子.测试)",
        R"(http://उदाहरण.परीक्षा)",
        R"(http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com)",
        R"(http://1337.net)",
        R"(http://a.b-c.de)",
        R"(http://223.255.255.254)",
    };
}

QStringList getValidButIgnoredLinks()
{
    return {
        R"(http://username:password@github.com/)",
        R"(https://username:password@github.com/)",
        R"(http://userid:password@example.com)",
        R"(http://userid:password@example.com/)",
        R"(http://userid:password@example.com:8080)",
        R"(http://userid:password@example.com:8080/)",
    };
}

QStringList getInvalidLinks()
{
    return {
        R"(1.40)",
        R"(test..)",
        R"(test.)",
        R"(http://)",
        R"(http://.)",
        R"(http://..)",
        R"(http://../)",
        R"(http://?)",
        R"(http://??)",
        R"(http://??/)",
        R"(http://#)",
        R"(http://##)",
        R"(http://##/)",
        R"(http://foo.bar?q=Spaces should be encoded)",
        R"(//)",
        R"(//a)",
        R"(///a)",
        R"(///)",
        R"(http:///a)",
        R"(foo.com)",
        R"(rdar://1234)",
        R"(h://test)",
        R"(http:// shouldfail.com)",
        R"(:// should fail)",
        R"(http://foo.bar/foo(bar)baz quux)",
        R"(ftps://foo.bar/)",
        R"(http://-error-.invalid/)",
        R"(http://a.b--c.de/)",
        R"(http://-a.b.co)",
        R"(http://a.b-.co)",
        R"(http://0.0.0.0)",
        R"(http://10.1.1.0)",
        R"(http://10.1.1.255)",
        R"(http://224.1.1.1)",
        R"(http://1.1.1.1.1)",
        R"(http://123.123.123)",
        R"(http://3628126748)",
        R"(http://.www.foo.bar/)",
        R"(http://www.foo.bar./)",
        R"(http://.www.foo.bar./)",
        R"(http://10.1.1.1)",
    };
}

}  // namespace chatterino
