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);
}
}
}
}