using System.Collections.Generic;
using Tornado3_2026Election.Services;

namespace Tornado3_2026Election.Persistence;

public sealed class AppState
{
    public string OperationMode { get; set; } = "General";

    public string BroadcastPhase { get; set; } = "Counting";

    public string SelectedStationId { get; set; } = "KNN";

    public string ImageRootPath { get; set; } = TornadoPathResolver.GetDefaultT3CutPath();

    public bool AutoRestoreSchedules { get; set; } = true;

    public bool AutoRestoreStations { get; set; } = true;

    public bool AutoRestoreStatusValues { get; set; } = true;

    public int WindowWidth { get; set; }

    public int WindowHeight { get; set; }

    public int? WindowX { get; set; }

    public int? WindowY { get; set; }

    public bool IsWindowMaximized { get; set; }

    public bool IsDebugFeaturesEnabled { get; set; }

    public int NormalLayerNo { get; set; }

    public int TopLeftLayerNo { get; set; } = 1;

    public int BottomLayerNo { get; set; } = 2;

    public int VideoWallLayerNo { get; set; }

    public bool IsPollingEnabled { get; set; } = true;

    public int PollingIntervalSeconds { get; set; } = 60;

    public string ElectionType { get; set; } = "광역단체장";

    public string DistrictName { get; set; } = "부산광역시";

    public string DistrictCode { get; set; } = "26";

    public bool ShowOnlyConfiguredRegions { get; set; }

    public double CloseRaceThresholdPercent { get; set; } = 5.0;

    public double SuperCloseRaceThresholdPercent { get; set; } = 3.0;

    public int TotalExpectedVotes { get; set; } = 1_240_000;

    public int TurnoutVotes { get; set; } = 528_400;

    public List<CandidateState> Candidates { get; set; } = [];

    public Dictionary<string, ChannelState> Channels { get; set; } = [];

    public Dictionary<string, double> CutDurations { get; set; } = [];

    public Dictionary<string, string> StationRegionFilters { get; set; } = [];

    public Dictionary<string, string> StationVideoWallLayouts { get; set; } = [];
}
