using laba3.Core;
using laba3.Subprograms;
using System;

class Program
{
    static void Main()
    {
        Menu mainMenu = new Menu("Select option");
        mainMenu.AddOption("Guess answer math game", () => GuessAnswerMath.RunGame());
        mainMenu.AddOption("About me", () => PrintAboutMe());
        mainMenu.AddOption("Array sort", () => new ArraySortDemo().Run());
        mainMenu.AddOption("Snake game", () => {
            int sizex = 0;
            int sizey = 0;
            SnakeGame.Level difficulty = 0;
            Menu sizeMenu = new Menu("Select world size");
            sizeMenu.AddOption("Small size (10x10)", () => { sizex = 10; sizey = 10; });
            sizeMenu.AddOption("Medium size (20x20)", () => { sizex = 20; sizey = 20; });
            sizeMenu.AddOption("Big size (40x20)", () => { sizex = 40; sizey = 20; });
            sizeMenu.RunMenu();

            Menu difficultyMenu = new Menu("Select difficulty");
            difficultyMenu.AddOption("Easy", () => { difficulty = SnakeGame.Level.Low; });
            difficultyMenu.AddOption("Medium", () => { difficulty = SnakeGame.Level.Medium; });
            difficultyMenu.AddOption("Hard", () => { difficulty = SnakeGame.Level.High; });
            difficultyMenu.RunMenu();

            SnakeGame game = new SnakeGame(difficulty, sizex, sizey);
            game.start();


        });
        mainMenu.AddOption("Exit", () => Exit());

        Utils.Arrays withoutParams = new Utils.Arrays();
        Utils.Arrays withOneParam = new Utils.Arrays(10);
        Utils.Arrays withTwoParams = new Utils.Arrays(10, 100);

        while (true)
        {
            mainMenu.RunMenu();
            Console.WriteLine("Press Enter to continue");
            while (Console.ReadKey().Key != ConsoleKey.Enter) { }
            Console.Clear();
        }
    }

    private static void PrintAboutMe()
    {
        const string aboutme = @"Морозов Иван Сергеевич 6106 aka DIvan2000
Website: divan2000.su";
        Console.WriteLine(aboutme);
    }
    private static void Exit()
    {
        if(ExitMenu())
            Environment.Exit(0);
    }
    private static bool ExitMenu()
    {
        while (true)
        {
            Console.WriteLine("Really exit? [y/n]");
            switch (Console.ReadKey(true).KeyChar)
            {
                case 'y':
                    return true;
                case 'n':
                    return false;
                default:
                    Console.Clear();
                    Console.WriteLine("Wrong key!");
                    break;
            }
        }
    }
}