using Млаумчерб.Клиент.видимое;

namespace Млаумчерб.Клиент;

public record Настройки
{
    public string имя_пользователя { get; set; } = "";
    public int выделенная_память_мб { get; set; } = 4096;
    public bool открывать_на_весь_экран { get; set; }
    public string путь_к_кубачу { get; set; } = ".";
    public string путь_к_жабе { get; set; } = "java";
    public bool скачать_жабу { get; set; } = true;
    public string? последняя_запущенная_версия;
    
    public static Настройки ЗагрузитьИзФайла(string имя_файла = "млаумчерб.настройки")
    {
        Приложение.Логгер.LogInfo(nameof(Настройки), $"попытка загрузить настройки из файла '{имя_файла}'");
        if(!File.Exists(имя_файла))
        {
            Приложение.Логгер.LogInfo(nameof(Настройки), "файл не существует");
            return new Настройки();
        }

        string текст = File.ReadAllText(имя_файла);
        Настройки? н = JsonConvert.DeserializeObject<Настройки>(текст);
        if (н == null)
        {
            File.Move(имя_файла, имя_файла + ".старые", true);
            н = new Настройки();
            н.СохранитьВФайл();
            Ошибки.ПоказатьСообщение("Настройки", $"Не удалось прочитать настройки.\n" +
                     $"Сломанный файл настроек переименован в '{имя_файла}.старые'.\n" +
                     $"Создан новый файл '{имя_файла}'.");
        }

        Приложение.Логгер.LogInfo(nameof(Настройки), $"настройки загружены: {н}");
        return н;
    }

    public void СохранитьВФайл(string имя_файла = "млаумчерб.настройки")
    {
        Приложение.Логгер.LogInfo(nameof(Настройки), $"попытка сохранить настройки в файл '{имя_файла}'");
        var текст = JsonConvert.SerializeObject(this, Formatting.Indented);
        File.WriteAllText(имя_файла, текст);
        Приложение.Логгер.LogInfo(nameof(Настройки), $"настройки сохранены: {текст}");
    }
}