using Mirea.Api.DataAccess.Persistence.Common;
using Mirea.Api.Dto.Common;
using Mirea.Api.Endpoint.Configuration.Validation.Attributes;
using Mirea.Api.Endpoint.Configuration.Validation.Interfaces;
using System;
using System.Text.Json.Serialization;

namespace Mirea.Api.Endpoint.Configuration.Model.GeneralSettings;

[RequiredSettings]
public class DbSettings : IIsConfigured
{
    public DatabaseType TypeDatabase { get; set; }
    public required string ConnectionStringSql { get; set; }

    [JsonIgnore]
    public DatabaseProvider DatabaseProvider =>
        TypeDatabase switch
        {
            DatabaseType.PostgresSql => DatabaseProvider.Postgresql,
            DatabaseType.Mysql => DatabaseProvider.Mysql,
            DatabaseType.Sqlite => DatabaseProvider.Sqlite,
            _ => throw new ArgumentOutOfRangeException()
        };

    public bool IsConfigured() =>
        !string.IsNullOrEmpty(ConnectionStringSql);
}