//----------------------------------------------------------

        public static void Main(string[] args)
        {
            var directorManager = new DirectorManager();
            var studioManager   = new StudioManager();
            var genreManager    = new GenreManager();
            var movieManager    = new MovieManager();
            var storageManager  = new StorageManager();
            var cashManager     = new CashManager(storageManager, movieManager);

            Init(studioManager, genreManager, directorManager, storageManager, movieManager, cashManager);

            Run(storageManager);

            while (true)
            {
                Console.WriteLine("Select an action:" +
                                  "\n1) storage" +
                                  "\n2) cash" +
                                  "\n3) show info" +
                                  "\n4) data base edit" +
                                  "\n5) finish\n");
                var val = Console.ReadLine();
                switch (val)
                {
                //----storage----
                case "1":
                {
                    Console.WriteLine("\nSelect options(above the quantity of items):" +
                                      "\n1) add" +
                                      "\n2) subtract" +
                                      "\n3) come back\n");
                    var opt = Console.ReadLine();
                    switch (opt)
                    {
                    //add quantity
                    case "1":
                    {
                        Console.WriteLine("\nEnter Movie name");
                        var name = Console.ReadLine();

                        Console.WriteLine("\nEnter quantity");
                        var q        = Console.ReadLine();
                        var quantity = 0;
                        try
                        {
                            quantity = int.Parse(q);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! incorrect number\n");
                            break;
                        }

                        quantity = int.Parse(q);
                        storageManager.Add(name, quantity);
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //subtract
                    case "2":
                    {
                        Console.WriteLine("\nEnter Movie name");
                        var name = Console.ReadLine();

                        Console.WriteLine("\nEnter quantity");
                        var q = Console.ReadLine();

                        var quantity = 0;
                        try
                        {
                            quantity = int.Parse(q);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! incorrect number\n");
                            break;
                        }

                        quantity = int.Parse(q);
                        if (!storageManager.Remove(name, quantity))
                        {
                            Console.WriteLine("\n! operation aborted\n");
                        }
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //exit
                    case "3":
                    {
                        break;
                    }

                    default:
                    {
                        Console.WriteLine("\n! unknown command, repeat\n");
                        break;
                    }
                    }
                    break;
                }

                //cashier
                case "2":
                {
                    Console.WriteLine("\nSelect option:" +
                                      "\n1) edit movie price" +
                                      "\n2) add sell " +
                                      "\n3) come back\n");
                    var opt = Console.ReadLine();
                    switch (opt)
                    {
                    // change price
                    case "1":
                    {
                        Console.WriteLine("\nEnter Movie name");
                        var name = Console.ReadLine();

                        Console.WriteLine("\nPlease, enter a new price");
                        var sPrice = Console.ReadLine();

                        var price = 0;
                        try
                        {
                            price = int.Parse(sPrice);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("! incorrect number");
                            break;
                        }
                        price = int.Parse(sPrice);

                        Console.WriteLine(cashManager.ChangePrice(name, price) ? "OK" : "ERROR");

                        break;
                    }

                    // add sale
                    case "2":
                    {
                        Console.WriteLine("\nEnter Movie name");
                        var name = Console.ReadLine();

                        Console.WriteLine("\nEnter the number of films sold");
                        var sSale = Console.ReadLine();

                        var sale = 0;
                        try
                        {
                            sale = int.Parse(sSale);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("! incorrect number");
                            break;
                        }
                        sale = int.Parse(sSale);

                        Console.WriteLine(cashManager.OfferSale(name, sale) ? "OK" : "ERROR");

                        break;
                    }

                    // exit
                    case "3":
                    {
                        break;
                    }

                    default:
                    {
                        Console.WriteLine("\n! unknown command, repeat\n");
                        break;
                    }
                    }
                    break;
                }

                //customer
                case "3":
                {
                    Console.WriteLine("\nSelect an action:" +
                                      "\n1 - show all movies" +
                                      "\n2 - show all directors" +
                                      "\n3 - show all studios" +
                                      "\n4 - show all genre" +
                                      "\n5 - show all movies of a certain directors" +
                                      "\n6 - show all movies of a certain studio" +
                                      "\n7 - show all movies of a certain genre" +
                                      "\n8 - buy a movie" +
                                      "\n9 - come back");
                    var opt = Console.ReadLine();

                    switch (opt)
                    {
                    //all movie
                    case "1":
                    {
                        movieManager.ShowMovies(cashManager.GetMovie());
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //all directors
                    case "2":
                    {
                        directorManager.GetAllDirectors(cashManager.GetDirector());
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //all studio
                    case "3":
                    {
                        studioManager.GetAllStudios(cashManager.GetStudio());
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //all genre
                    case "4":
                    {
                        genreManager.GetAllGenres(cashManager.GetGenre());
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //movie by directors
                    case "5":
                    {
                        Console.WriteLine("\nEnter director id");
                        var director = Console.ReadLine();
                        int id;
                        try
                        {
                            id = int.Parse(director);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! unknown command, repeat\n");
                            break;
                        }

                        id = int.Parse(director);
                        movieManager.ShowDirectors(id, cashManager.GetMovie());
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //movie by studio
                    case "6":
                    {
                        Console.WriteLine("\nEnter studio id");
                        var studio = Console.ReadLine();
                        int id;
                        try
                        {
                            id = int.Parse(studio);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! unknown command, repeat\n");
                            break;
                        }

                        id = int.Parse(studio);
                        movieManager.ShowStudios(id, cashManager.GetMovie());
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //movie by genre
                    case "7":
                    {
                        Console.WriteLine("\nEnter genre id");
                        var genre = Console.ReadLine();
                        int id;
                        try
                        {
                            id = int.Parse(genre);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! unknown command, repeat\n");
                            break;
                        }

                        id = int.Parse(genre);
                        movieManager.ShowGenres(id, cashManager.GetMovie());
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //buy a movie
                    case "8":
                    {
                        Console.WriteLine("\nEnter the name of the selected movie:");
                        var name = Console.ReadLine();

                        Console.WriteLine("\nEnter quantity:");
                        var q = Console.ReadLine();

                        int quantity;
                        try
                        {
                            quantity = int.Parse(q);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! unknown command, repeat\n");
                            break;
                        }

                        quantity = int.Parse(q);
                        Console.WriteLine("\nDeposit money:");
                        var m = Console.ReadLine();
                        int money;
                        try
                        {
                            money = int.Parse(m);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! unknown command, repeat\n");
                            break;
                        }

                        money = int.Parse(m);
                        var balance = cashManager.Sell(name, quantity, money);
                        Console.WriteLine("Balance: " + balance);
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    //exit
                    case "9":
                    {
                        break;
                    }

                    default:
                    {
                        Console.WriteLine("\n! unknown command, repeat\n");
                        break;
                    }
                    }

                    break;
                }

                //data
                case "4":
                {
                    Console.WriteLine("\nSelect option:" +
                                      "\n1) add a new movie" +
                                      "\n2) add a new director" +
                                      "\n3) add a new studio" +
                                      "\n4) add a new genre" +
                                      "\n5) come back\n");
                    var opt = Console.ReadLine();

                    switch (opt)
                    {
                    // new movie
                    case "1":
                    {
                        Console.WriteLine("\nEnter the name of the selected movie:");
                        var name = Console.ReadLine();

                        Console.WriteLine("\nEnter the DIRECTOR of your new movie");
                        var dir   = Console.ReadLine();
                        var dirId = 0;
                        try
                        {
                            dirId = int.Parse(dir);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! unknown command, repeat\n");
                            break;
                        }
                        dirId = int.Parse(dir);

                        Console.WriteLine("\nEnter the STUDIO of your new movie");
                        var studio   = Console.ReadLine();
                        var studioId = 0;
                        try
                        {
                            studioId = int.Parse(studio);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! unknown command, repeat\n");
                            break;
                        }
                        studioId = int.Parse(studio);

                        Console.WriteLine("\nEnter the GENRE of your new movie");
                        var genre   = Console.ReadLine();
                        var genreId = 0;
                        try
                        {
                            genreId = int.Parse(genre);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("\n! unknown command, repeat\n");
                            break;
                        }
                        genreId = int.Parse(genre);

                        movieManager.Add(name, dirId, studioId, genreId);
                        Console.WriteLine("\nOK\n");

                        break;
                    }

                    // new director
                    case "2":
                    {
                        Console.WriteLine("\nEnter new DIRECTOR name");
                        var name = Console.ReadLine();
                        directorManager.Add(name);
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    // new studio
                    case "3":
                    {
                        Console.WriteLine("\nEnter new STUDIO name");
                        var name = Console.ReadLine();
                        studioManager.Add(name);
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    // new material
                    case "4":
                    {
                        Console.WriteLine("\nEnter new GENRE name");
                        var name = Console.ReadLine();
                        genreManager.Add(name);
                        Console.WriteLine("\nOK\n");
                        break;
                    }

                    // exit
                    case "5":
                    {
                        break;
                    }

                    default:
                    {
                        Console.WriteLine("\n! unknown command, repeat\n");
                        break;
                    }
                    }
                    break;
                }

                //exit
                case "5":
                {
                    return;
                }

                default:
                {
                    Console.WriteLine("\n! unknown command, repeat\n");
                    break;
                }
                }
            }
        }
        public static void Init(StudioManager studioManager, GenreManager genreManager, DirectorManager directorManager,
                                StorageManager storageManager, MovieManager movieManager, CashManager cashManager)
        {
            // add studio
            var pixarId      = studioManager.Add("Pixar");
            var disneyId     = studioManager.Add("Disney");
            var marvelId     = studioManager.Add("MARVEL");
            var universalId  = studioManager.Add("Universal");
            var columbiaId   = studioManager.Add("Columbia");
            var dreamWorksId = studioManager.Add("DreamWorks");

            // add genre
            var comedyId  = genreManager.Add("comedy");
            var cartonId  = genreManager.Add("carton");
            var dramaId   = genreManager.Add("drama");
            var horrorsId = genreManager.Add("horrors");
            var actionId  = genreManager.Add("action");
            var fantasyId = genreManager.Add("fantasy");

            // add directors
            var popovId   = directorManager.Add("PopovAA");
            var zverevlId = directorManager.Add("ZverevAB");
            var retrovId  = directorManager.Add("PetrovVG");
            var bobrovId  = directorManager.Add("BobrovII");
            var pechkinId = directorManager.Add("PechkinDR");
            var andreevId = directorManager.Add("AndreevEI");

            movieManager.Add("Cars", popovId, pixarId, fantasyId);
            movieManager.Add("Hero", bobrovId, universalId, actionId);
            movieManager.Add("ForDead", zverevlId, columbiaId, horrorsId);
            movieManager.Add("ForDead 2", zverevlId, columbiaId, horrorsId);
            movieManager.Add("Cars 2", popovId, pixarId, fantasyId);

            storageManager.Add("Cars", 50);
            storageManager.Add("Hero", 150);
            storageManager.Add("ForDead", 200);
            storageManager.Add("ForDead 2", 100);
            storageManager.Add("Cars 2", 250);

            cashManager.ChangePrice("Cars", 350);
            cashManager.ChangePrice("Hero", 250);
            cashManager.ChangePrice("ForDead", 400);
            cashManager.ChangePrice("ForDead 2", 200);
            cashManager.ChangePrice("Cars 2", 400);
        }