using OI.Metrology.Server.Models;
using OI.Metrology.Shared.Models.Stateless;

namespace OI.Metrology.Server.Repository;

public class AppSettingsRepository : IAppSettingsRepository<Models.Binder.AppSettings>
{

    private readonly AppSettings _AppSettings;

    public AppSettingsRepository(AppSettings appSettings) => _AppSettings = appSettings;

    internal Models.Binder.AppSettings GetAppSettings()
    {
        Models.Binder.AppSettings result = new()
        {
            BuildNumber = _AppSettings.BuildNumber,
            Company = _AppSettings.Company,
            GitCommitSeven = _AppSettings.GitCommitSeven,
            IsDevelopment = _AppSettings.IsDevelopment,
            IsStaging = _AppSettings.IsStaging,
        };
        return result;
    }

    Models.Binder.AppSettings IAppSettingsRepository<Models.Binder.AppSettings>.GetAppSettings() => GetAppSettings();

    internal string GetBuildNumberAndGitCommitSeven()
    {
        string result = string.Concat(_AppSettings.BuildNumber, '-', _AppSettings.GitCommitSeven);
        return result;
    }

    internal void VerifyConnectionStrings()
    {
        if (string.IsNullOrEmpty(_AppSettings.ConnectionString))
            throw new NotSupportedException();
#if DEBUG
        if (!_AppSettings.ConnectionString.Contains("test", StringComparison.CurrentCultureIgnoreCase))
            throw new NotSupportedException();
#endif
#if !DEBUG
        if (_AppSettings.ConnectionString.Contains("test", StringComparison.CurrentCultureIgnoreCase))
            throw new NotSupportedException();
#endif
    }

    string IAppSettingsRepository<Models.Binder.AppSettings>.GetBuildNumberAndGitCommitSeven() => GetBuildNumberAndGitCommitSeven();

    void IAppSettingsRepository<Models.Binder.AppSettings>.VerifyConnectionStrings() => VerifyConnectionStrings();

}