using System;

namespace Expedience.Api
{
    public static class UserNameGenerator
    {
        private static readonly Random _random;
        static UserNameGenerator()
        {
            int seed = (int)DateTime.Now.Ticks & 0x0000FFFF;
            _random = new Random(seed);
        }

        public static string Generate()
        {
            var firstIndex = _random.Next(_adjectives.Count);
            var lastIndex = _random.Next(_names.Count);
            var suffixIndex = _random.Next(_romanNumerals.Count);
            var firstName = _adjectives[firstIndex];
            var lastName = _names[lastIndex];
            var suffix = _romanNumerals[suffixIndex];

            var name = $"{firstName} {lastName}";
            if (suffix != string.Empty) name += " " + suffix;
            
            return name;
        }

        private static readonly List<string> _names = new List<string>()
        {
            "Strife",
            "Valentine",
            "Highwind",
            "Gainsborough",
            "Lockhart",
            "Wallace",
            "Leonhart",
            "Zangan",
            "Cidolfus",
            "Kinneas",
            "Trepe",
            "Loire",
            "Rinoa",
            "Almasy",
            "Caraway",
            "Heartilly",
            "Leonis",
            "Harlow",
            "Nox Fleuret",
            "Ulric",
            "Amicitia",
            "Caelum",
            "Scientia",
            "Argentum",
            "Aurum",
            "Lucis",
            "Estheim",
            "Villiers",
            "Farron",
            "Katzroy",
            "Nabaat",
            "Yaag Rosch",
            "Oerba",
            "Paddra",
            "Lesca",
            "Folles",
            "Zephyr",
            "Martine",
            "Beoulve",
            "Gaffgarion",
            "Loffrey",
            "Mewt",
            "Totema",
            "Baert",
            "Bervenia",
            "Malak",
            "Ladd",
            "Kadaj",
            "Loz",
            "Yazoo",
            "Jenova",
            "Sephiroth",
            "Hojo",
            "Heidegger",
            "Scarlet",
            "Reeve",
            "Palmer",
            "Tseng",
            "Reno",
            "Rude",
            "Elmyra",
            "Fair",
            "Gast",
            "Nanaki",
            "Shelke",
            "Azul",
            "Nero",
            "Calca",
            "Brina",
            "Shirma",
            "Hilda",
            "Croma",
            "Aleria",
            "Reinhold",
            "Rosenburg",
            "Deneb",
            "Cassiopeia",
            "Vega",
            "Altair",
            "Antares",
            "Andromeda",
            "Cygnus",
            "Fomalhaut",
            "Aldebaran",
            "Betelgeuse",
            "Bellatrix",
            "Regulus",
            "Sirius",
            "Arcturus",
            "Pollux",
            "Castor",
            "Capella",
            "Procyon",
            "Achernar",
            "Alphard",
            "Alcyone",
            "Atlas",
            "Hyperion",
            "Iapetus",
            "Tethys",
            "Cloud",
            "Tifa",
            "Aerith",
            "Zack",
            "Sephiroth",
            "Vincent",
            "Yuffie",
            "Barret",
            "Red XIII",
            "Cait Sith",
            "Cid",
            "Squall",
            "Rinoa",
            "Selphie",
            "Quistis",
            "Zell",
            "Irvine",
            "Laguna",
            "Kiros",
            "Ward",
            "Edea",
            "Seifer",
            "Ultimecia",
            "Vivi",
            "Garnet",
            "Zidane",
            "Steiner",
            "Freya",
            "Amarant",
            "Beatrix",
            "Eiko",
            "Kuja",
            "Tidus",
            "Yuna",
            "Wakka",
            "Lulu",
            "Kimahri",
            "Auron",
            "Rikku",
            "Paine",
            "Vaan",
            "Ashe",
            "Balthier",
            "Fran",
            "Basch",
            "Lightning",
            "Snow",
            "Hope",
            "Vanille",
            "Fang",
            "Serah",
            "Noel",
            "Caius",
            "Rydia",
            "Rosa",
            "Cecil",
            "Kain",
            "Golbez",
            "Edge",
            "Porom",
            "Palom",
            "Terra",
            "Locke",
            "Celes",
            "Edgar",
            "Sabin",
            "Shadow",
            "Cyan",
            "Setzer",
            "Mog",
            "Gau",
            "Umaro",
            "Relm",
            "Strago",
            "Gogo",
            "Zemus",
            "Fusoya",
            "Tellah",
            "Edward",
            "Yang",
            "Ursula",
            "Firion",
            "Maria",
            "Guy",
            "Leon",
            "Minwu",
            "Josef",
            "Ricard",
            "Refia",
            "Luneth",
            "Arc",
            "Ingus",
            "Krile",
            "Galuf",
            "Bartz",
            "Lenna",
            "Faris",
            "Exdeath",
            "Gilgamesh",
            "Cidolfus"
        };

        private static List<string> _adjectives = new List<string>
        {
            "Adventurous",
            "Affectionate",
            "Agile",
            "Ambitious",
            "Amiable",
            "Artistic",
            "Assertive",
            "Astute",
            "Attentive",
            "Authentic",
            "Awesome",
            "Balanced",
            "Beautiful",
            "Blissful",
            "Bold",
            "Brave",
            "Bright",
            "Brilliant",
            "Calm",
            "Capable",
            "Carefree",
            "Careful",
            "Caring",
            "Charismatic",
            "Charming",
            "Cheerful",
            "Clean",
            "Clear-minded",
            "Clever",
            "Colorful",
            "Comfortable",
            "Committed",
            "Compassionate",
            "Confident",
            "Considerate",
            "Consistent",
            "Contemplative",
            "Cooperative",
            "Courageous",
            "Courteous",
            "Creative",
            "Cultured",
            "Curious",
            "Daring",
            "Dazzling",
            "Decisive",
            "Deep",
            "Delightful",
            "Dependable",
            "Determined",
            "Devoted",
            "Diligent",
            "Dynamic",
            "Eager",
            "Easygoing",
            "Eccentric",
            "Educated",
            "Efficient",
            "Elegant",
            "Eloquent",
            "Empathetic",
            "Endearing",
            "Energetic",
            "Enthusiastic",
            "Excellent",
            "Exciting",
            "Experienced",
            "Expressive",
            "Extraordinary",
            "Exuberant",
            "Fabulous",
            "Fair",
            "Faithful",
            "Fantastic",
            "Fearless",
            "Fierce",
            "Flamboyant",
            "Flawless",
            "Focused",
            "Forgiving",
            "Friendly",
            "Fun",
            "Funny",
            "Generous",
            "Gentle",
            "Genuine",
            "Gifted",
            "Glorious",
            "Graceful",
            "Gracious",
            "Grateful",
            "Great",
            "Hardworking",
            "Harmonious",
            "Healthy",
            "Heartfelt",
            "Helpful",
            "Heroic",
            "Honest",
            "Honorable",
            "Hopeful",
            "Humble",
            "Humorous",
            "Idealistic",
            "Imaginative",
            "Impartial",
            "Independent",
            "Innovative",
            "Inquisitive",
            "Insightful",
            "Inspiring",
            "Intelligent",
            "Intuitive",
            "Inventive",
            "Joyful",
            "Jovial",
            "Judicious",
            "Just",
            "Kind",
            "Knowledgeable",
            "Laid-back",
            "Leisurely",
            "Liberated",
            "Lively",
            "Logical",
            "Lovable",
            "Loving",
            "Loyal",
            "Lucid",
            "Magical",
            "Magnificent",
            "Majestic",
            "Masterful",
            "Mature",
            "Mellow",
            "Meticulous",
            "Mindful",
            "Modest",
            "Motivated",
            "Mysterious",
            "Nimble",
            "Noble",
            "Open-minded",
            "Optimistic",
            "Organized",
            "Original",
            "Outgoing",
            "Passionate",
            "Patient",
            "Peaceful",
            "Perfect",
            "Persevering",
            "Persistent",
            "Playful",
            "Pleasant",
            "Polite",
            "Positive",
            "Powerful",
            "Precise",
            "Proactive",
            "Progressive",
            "Prosperous",
            "Proud",
            "Qualified",
            "Quick",
            "Quiet",
            "Radiant",
            "Rational",
            "Realistic",
            "Reflective",
            "Relaxed",
            "Reliable",
            "Resilient",
            "Resourceful",
            "Respectful",
            "Responsible",
            "Robust",
            "Romantic",
            "Sane",
            "Satisfying",
            "Sensitive",
            "Serene",
            "Sharp",
            "Shrewd",
            "Sincere",
            "Skillful",
            "Smart",
            "Smooth",
            "Social",
            "Solid",
            "Sophisticated",
            "Soulful",
            "Sparkling",
            "Special",
            "Spiritual",
            "Spontaneous",
            "Stable",
            "Steadfast",
            "Steady",
            "Strong",
            "Stunning",
            "Successful",
            "Superb",
            "Supportive",
            "Surprising",
            "Sweet",
            "Sympathetic",
            "Systematic",
            "Tactful",
            "Talented",
            "Tenacious",
            "Thankful",
            "Thorough",
            "Thoughtful",
            "Thrilled",
            "Thriving",
            "Tidy",
            "Timely",
            "Tolerant",
            "Tranquil",
            "Transparent",
            "Trustworthy",
            "Unassuming",
            "Understanding",
            "Unique",
            "Unselfish",
            "Unwavering",
            "Upbeat",
            "Valiant",
            "Versatile",
            "Vibrant",
            "Victorious",
            "Vigilant",
            "Vigorous",
            "Virtuous",
            "Visionary",
            "Vital",
            "Vivacious",
            "Warm",
            "Welcoming",
            "Wholehearted",
            "Willing",
            "Wise",
            "Witty",
            "Wonderful",
            "Worthy",
            "Youthful",
            "Zealous",
            "Zest"
        };

        private static List<string> _romanNumerals = new List<string> { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX" };
    }
}
