using System.Collections.Generic;
using System.Text.Json.Serialization;

namespace AxCopilot.Models;

public class AppSettings
{
	[JsonPropertyName("version")]
	public string Version { get; set; } = "1.0";

	[JsonPropertyName("ai_enabled")]
	public bool AiEnabled { get; set; } = false;

	[JsonPropertyName("hotkey")]
	public string Hotkey { get; set; } = "Alt+Space";

	[JsonPropertyName("launcher")]
	public LauncherSettings Launcher { get; set; } = new LauncherSettings();

	[JsonPropertyName("indexPaths")]
	public List<string> IndexPaths { get; set; } = new List<string> { "%USERPROFILE%\\Desktop", "%APPDATA%\\Microsoft\\Windows\\Start Menu" };

	[JsonPropertyName("indexExtensions")]
	public List<string> IndexExtensions { get; set; } = new List<string>
	{
		".exe", ".lnk", ".bat", ".ps1", ".url", ".cmd", ".msi", ".pdf", ".doc", ".docx",
		".xls", ".xlsx", ".ppt", ".pptx", ".hwp", ".hwpx", ".txt", ".md", ".csv", ".json",
		".xml", ".yaml", ".yml", ".log", ".ini", ".cfg", ".conf", ".png", ".jpg", ".jpeg",
		".gif", ".bmp", ".svg", ".webp", ".ico", ".tiff", ".zip", ".7z", ".rar"
	};

	[JsonPropertyName("indexSpeed")]
	public string IndexSpeed { get; set; } = "normal";

	[JsonPropertyName("monitorMismatch")]
	public string MonitorMismatch { get; set; } = "warn";

	[JsonPropertyName("profiles")]
	public List<WorkspaceProfile> Profiles { get; set; } = new List<WorkspaceProfile>();

	[JsonPropertyName("aliases")]
	public List<AliasEntry> Aliases { get; set; } = new List<AliasEntry>();

	[JsonPropertyName("clipboardTransformers")]
	public List<ClipboardTransformer> ClipboardTransformers { get; set; } = new List<ClipboardTransformer>();

	[JsonPropertyName("apiAdapters")]
	public List<ApiAdapter> ApiAdapters { get; set; } = new List<ApiAdapter>();

	[JsonPropertyName("plugins")]
	public List<PluginEntry> Plugins { get; set; } = new List<PluginEntry>();

	[JsonPropertyName("snippets")]
	public List<SnippetEntry> Snippets { get; set; } = new List<SnippetEntry>();

	[JsonPropertyName("clipboardHistory")]
	public ClipboardHistorySettings ClipboardHistory { get; set; } = new ClipboardHistorySettings();

	[JsonPropertyName("systemCommands")]
	public SystemCommandSettings SystemCommands { get; set; } = new SystemCommandSettings();

	[JsonPropertyName("screenCapture")]
	public ScreenCaptureSettings ScreenCapture { get; set; } = new ScreenCaptureSettings();

	[JsonPropertyName("reminder")]
	public ReminderSettings Reminder { get; set; } = new ReminderSettings();

	[JsonPropertyName("llm")]
	public LlmSettings Llm { get; set; } = new LlmSettings();
}
