using System;
using System.IO;
using System.Text.Json;
using PhotoboothUploader.Models;

namespace PhotoboothUploader.Services;

public sealed class SettingsStore
{
    private readonly JsonSerializerOptions _options = new()
    {
        PropertyNameCaseInsensitive = true,
        WriteIndented = true,
    };

    public string SettingsPath { get; }
    public string LogPath { get; }

    public SettingsStore()
    {
        var basePath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
            "Fotospiel",
            "PhotoboothUploader");

        Directory.CreateDirectory(basePath);
        SettingsPath = Path.Combine(basePath, "settings.json");
        LogPath = Path.Combine(basePath, "uploader.log");
    }

    public PhotoboothSettings Load()
    {
        if (!File.Exists(SettingsPath))
        {
            return new PhotoboothSettings();
        }

        var json = File.ReadAllText(SettingsPath);
        return JsonSerializer.Deserialize<PhotoboothSettings>(json, _options) ?? new PhotoboothSettings();
    }

    public void Save(PhotoboothSettings settings)
    {
        var json = JsonSerializer.Serialize(settings, _options);
        File.WriteAllText(SettingsPath, json);
    }
}
