using System;

namespace Pr7Tombola
{
    static class Generico
    {
        public static int Menu(params string[] opzioni)
        {
            Console.Clear();
            Console.SetCursorPosition(0, 0);

            int scelta = 0;
            bool scelto = false;
            ConsoleKeyInfo k;

            do
            {
                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.White;

                for (int i = 0; i < opzioni.Length; i++)
                {
                    if (i < opzioni.Length - 1)
                        Console.BackgroundColor = scelta == i ? ConsoleColor.DarkGreen : ConsoleColor.Black;
                    else
                        Console.BackgroundColor = scelta == i ? ConsoleColor.Red : ConsoleColor.Black;

                    Console.WriteLine("{0} {1}", scelta == i ? "-->" : i + " -", opzioni[i]);
                }

                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("\nSeleziona con freccette e invio per confermare.");
                Console.ForegroundColor = ConsoleColor.White;

                k = Console.ReadKey();
                switch (k.Key)
                {
                    case ConsoleKey.UpArrow:
                        if (scelta > 0)
                            scelta--;
                        break;
                    case ConsoleKey.DownArrow:
                        if (scelta < opzioni.Length - 1)
                            scelta++;
                        break;
                    case ConsoleKey.Enter:
                    case ConsoleKey.Spacebar:
                        scelto = true;
                        break;
                    case ConsoleKey.End:
                        return scelta = -1;
                    case ConsoleKey.D0:
                    case ConsoleKey.D1:
                    case ConsoleKey.D2:
                    case ConsoleKey.D3:
                    case ConsoleKey.D4:
                    case ConsoleKey.D5:
                    case ConsoleKey.D6:
                    case ConsoleKey.D7:
                    case ConsoleKey.D8:
                    case ConsoleKey.D9:
                        do
                        {
                            int.TryParse(k.Key.ToString().Substring(1), out scelta);
                        } while (scelta < 0 || scelta >= opzioni.Length);
                        scelto = true;
                        break;
                }
                Console.Clear();
            } while (scelto == false);

            return scelta;
        }
    }
}
