Загрузка данных


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text.Json;

namespace CinemaApp
{
    public class Seat
    {
        public int Row { get; set; }
        public int Number { get; set; }
        public bool IsOccupied { get; set; }
    }

    public class Session
    {
        public Guid Id { get; set; } = Guid.NewGuid();
        public DateTime Time { get; set; }
        public string Hall { get; set; }
        public decimal Price { get; set; }
        public List<Seat> Seats { get; set; } = new List<Seat>();

        public int FreeSeats => Seats.Count(s => !s.IsOccupied);
        public string DisplayInfo => $"{Time:HH:mm} | Зал: {Hall} | {Price} руб. | Свободно: {FreeSeats}";
    }

    public class Movie
    {
        public Guid Id { get; set; } = Guid.NewGuid();
        public string Title { get; set; }
        public string Genre { get; set; }
        public decimal Rating { get; set; }
        public string PosterPath { get; set; }
        public string Description { get; set; }
        public ObservableCollection<Session> Sessions { get; set; } = new ObservableCollection<Session>();
    }

    public static class DataManager
    {
        private const string FilePath = "cinema_data.json";

        public static ObservableCollection<Movie> Movies { get; set; } = new ObservableCollection<Movie>();

        public static void LoadData()
        {
            if (File.Exists(FilePath))
            {
                var json = File.ReadAllText(FilePath);
                Movies = JsonSerializer.Deserialize<ObservableCollection<Movie>>(json) ?? new ObservableCollection<Movie>();
            }
            else
            {
                GenerateDefaultData();
                SaveData();
            }
        }

        public static void SaveData()
        {
            var json = JsonSerializer.Serialize(Movies, new JsonSerializerOptions { WriteIndented = true });
            File.WriteAllText(FilePath, json);
        }

        private static void GenerateDefaultData()
        {
            var genres = new[] { "Боевик", "Комедия", "Драма", "Фантастика", "Ужасы" };
            var random = new Random();

            for (int i = 1; i <= 5; i++)
            {
                var movie = new Movie
                {
                    Title = $"Фильм {i}",
                    Genre = genres[random.Next(genres.Length)],
                    Rating = (decimal)(random.NextDouble() * 5 + 5),
                    Description = $"Описание для фильма {i}. Захватывающий сюжет и отличная игра актеров.",
                    PosterPath = "pack://application:,,,/default_poster.png" 
                };

                for (int s = 0; s < random.Next(3, 6); s++) // 3-5 сеансов
                {
                    var session = new Session
                    {
                        Time = DateTime.Today.AddHours(10 + s * 2),
                        Hall = $"Зал {random.Next(1, 4)}",
                        Price = random.Next(200, 600)
                    };

                    // Имитация сетки 8x10
                    for (int r = 1; r <= 8; r++)
                    {
                        for (int n = 1; n <= 10; n++)
                        {
                            session.Seats.Add(new Seat { Row = r, Number = n, IsOccupied = random.Next(10) > 8 });
                        }
                    }
                    movie.Sessions.Add(session);
                }
                Movies.Add(movie);
            }
        }
    }
}