using System;
using System.IO;
using System.Text.Json;
using System.Windows;

namespace UI.Configuracao
{
    public class DBConfig
    {
        public string Servidor { get; set; } = "localhost";
        public string Banco { get; set; } = "";
        public string Usuario { get; set; } = "";
        public string Senha { get; set; } = "";
        public bool Integrada { get; set; } = true;
        public string Sgbd { get; set; } = "SQL Server";
        public string Provedor { get; set; } = "System.Data.SqlClient";
    }

    public static class ConfiguracaoService
    {
        private static readonly string CaminhoConfig =
            Path.Combine(@"C:\Levelcode\LevelcodeSGI\Config", "settingsdb.json");

        public static DBConfig Carregar()
        {
            try
            {
                if (File.Exists(CaminhoConfig))
                {
                    string json = File.ReadAllText(CaminhoConfig);
                    return JsonSerializer.Deserialize<DBConfig>(json) ?? new DBConfig();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Erro ao carregar configurações:\n{ex.Message}",
                    "Aviso", MessageBoxButton.OK, MessageBoxImage.Warning);
            }

            return new DBConfig();
        }

        public static void Salvar(DBConfig config)
        {
            try
            {
                string pasta = Path.GetDirectoryName(CaminhoConfig)!;
                if (!Directory.Exists(pasta))
                    Directory.CreateDirectory(pasta);

                var options = new JsonSerializerOptions { WriteIndented = true };
                string json = JsonSerializer.Serialize(config, options);
                File.WriteAllText(CaminhoConfig, json);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Erro ao salvar configurações:\n{ex.Message}",
                    "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        public static string GerarConnectionString(DBConfig config)
        {
            if (config.Integrada)
                return $"Server={config.Servidor};Database={config.Banco};Integrated Security=True;TrustServerCertificate=True;";
            else
                return $"Server={config.Servidor};Database={config.Banco};User Id={config.Usuario};Password={config.Senha};TrustServerCertificate=True;";
        }
    }
}
