using UnityEngine;
using System.Collections;

public class RandomNameGenerator : MonoBehaviour
{

    // Random Name Generator
    //
    // Creates a random name from name lists
    // per team/country
    //
    // Developed by Thomas Hentschel Lund, Full Control
    // http://www.fullcontrol.dk/
    // thomas@fullcontrol.dk
    //
    // This software is free to use and expand. Please send me an email with a link to your project, so I can link to it!
    //

    public enum Team { German, English }

    private ArrayList UK_first = new ArrayList();
    private ArrayList UK_sur = new ArrayList();

    private ArrayList GE_first = new ArrayList();
    private ArrayList GE_sur = new ArrayList();

    private ArrayList usedNames = new ArrayList();

    public void Initialize() { 
        UK_first.AddRange( new string[] {"James", "Benjamin", "Joshua", "Ryan", "John", "Patrick", "Samuel", "William", "Jack", "Thomas", "Daniel", "Matthew", "Jacob", "Ethan", "Ronald", "Michael", "Richard", "Jonathan", "Joseph", "Oliver", "Harry", "Charlie", "Sean", "Jack", "Conor", "Adam", "James", "Daniel", "Luke", "Michael", "Aaron", "Jack", "Matthew", "Adam", "James", "Ryan", "Joshua", "Conor", "Ben", "Daniel", "Dylan", "Lewis", "Jack", "Callum", "James", "Ryan", "Cameron", "Kyle", "Jamie", "Daniel", "Matthew", "Peter"});
        UK_sur.AddRange( new string[] {"Anderson", "Brown", "Byrne", "Campbell", "Clark", "Davies", "Doyle", "Edwards", "Evans", "Gallagher", "Green", "Hall", "Harris", "Hughes", "Jackson", "Johnson", "Jones", "Kelly", "Kennedy", "Lewis", "Lynch", "Macdonald", "Martin", "McCarthy", "Mitchell", "Moore", "Morison", "Morris", "Murphy", "Murray", "O'Brien", "O'Connor", "O'Doherty", "O'Neill", "O'Reilly", "O'Sullivan", "Patel", "Paterson", "Quinn", "Reid", "Roberts", "Ross", "Ryan", "Scott", "Smith", "Stewart", "Taylor", "Thomas", "Thomson", "Walker", "Walsh", "Watson", "White", "Williams", "Wilson", "Wright", "Young"});

        GE_first.AddRange( new string[] {"Alexander", "Maximilian", "Leon", "Lukas", "Lucas", "Luca", "Paul", "Jonas", "Felix", "Tim", "David", "Jens", "Joachim", "Johan", "Heinrich", "Hugo", "Hubert", "Xaver", "Wilmar", "Wolfgang", "Waldmar", "Uwe", "Udo", "Ulrich", "Theo", "Thorsten", "Sven", "Sigfried", "Rubens", "Rudi", "Niklas", "Otto", "Max", "Manfred", "Leopold", "Guido", "Gunther", "Friedrich", "Fritz", "Frank", "Frans", "Eckard", "Erich", "Diedrich", "Dietrich", "Diether", "Bernard", "Bodo", "Aldo", "Arnold", "August", "Arne"});
        GE_sur.AddRange( new string[] {"Altenstein", "Altmann", "Bach", "Becker", "Berger", "Brand", "Denke", "Dunkel", "Eisner", "Engels", "Feuerbach", "Fischer", "Fuchs", "Geissler", "Grass", "Hahn", "Hankel", "Heilmann", "Hoffmann", "Huber", "Hueber", "Jost", "Kirchner", "Klein", "Krause", "List", "Lorenz", "Mann", "Meyer", "Moltke", "Mueller", "Obenauer", "Reich", "Reuter", "Sachs", "Schanze", "Schindler", "Schmidt", "Schneider", "Schulze", "Simmel", "Sommer", "Spitz", "Thiele", "Volkmann", "Wagner", "Weber"});

        usedNames.Clear();
    }

    public string CreateRandomNameByTeam(Team team)
    {
        string name = "";
        bool found = false;
        while (!found) {
            name = GetRandomFirstName(team) + " " + GetRandomSurName(team);
            if (!usedNames.Contains(name)) {
                usedNames.Add(name);
                found = true;
            }
        }
        return name;
    }


    private string GetRandomFirstName(Team team)
    {
        if (team == Team.English)
        {
            int index = Random.RandomRange(0, UK_first.Count - 1);
            return (string)UK_first[index];

        }
        else if (team == Team.German)
        {
            int index = Random.RandomRange(0, GE_first.Count - 1);
            return (string)GE_first[index];

        }
        else
        {
            Debug.LogError("Get first name - unknown team");
            return "Unknown";
        }
    }

    private string GetRandomSurName(Team team)
    {
        if (team == Team.English)
        {
            int index = Random.RandomRange(0, UK_sur.Count - 1);
            return (string)UK_sur[index];

        }
        else if (team == Team.German)
        {
            int index = Random.RandomRange(0, GE_sur.Count - 1);
            return (string)GE_sur[index];

        }
        else
        {
            Debug.LogError("Get surname - unknown team");
            return "Unknown";
        }
    }
}
