@namespace Oqtane.Installer.Controls
@implements Oqtane.Interfaces.IDatabaseConfigControl
@inject IStringLocalizer<SqlServerConfig> Localizer
@inject IStringLocalizer<SharedResources> SharedLocalizer

<div class="row mb-1 align-items-center">
	<Label Class="col-sm-3" For="server" HelpText="Enter the database server name. This might include a port number as well if you are using a cloud service (ie. servername.database.windows.net,1433) " ResourceKey="Server">Server:</Label>
    <div class="col-sm-9">
        <input id="server" type="text" class="form-control" @bind="@_server" />
    </div>
</div>
<div class="row mb-1 align-items-center">
    <Label Class="col-sm-3" For="database" HelpText="Enter the name of the database" ResourceKey="Database">Database:</Label>
    <div class="col-sm-9">
        <input id="database" type="text" class="form-control" @bind="@_database" />
    </div>
</div>
<div class="row mb-1 align-items-center">
    <Label Class="col-sm-3" For="security" HelpText="Select your security method" ResourceKey="Security">Security:</Label>
    <div class="col-sm-9">
        <select id="security" class="form-select custom-select" @bind="@_security">
            <option value="integrated" selected>@Localizer["Integrated"]</option>
            <option value="custom">@Localizer["Custom"]</option>
        </select>
    </div>
</div>
@if (_security == "custom")
{
    <div class="row mb-1 align-items-center">
        <Label Class="col-sm-3" For="uid" HelpText="Enter the username to use for the database" ResourceKey="Uid">User Id:</Label>
        <div class="col-sm-9">
            <input id="uid" type="text" class="form-control" @bind="@_uid" />
        </div>
    </div>
    <div class="row mb-1 align-items-center">
        <Label Class="col-sm-3" For="pwd" HelpText="Enter the password to use for the database" ResourceKey="Pwd">Password:</Label>
        <div class="col-sm-9">
             <div class="input-group">
                <input id="pwd" type="@_passwordType" class="form-control" @bind="@_pwd" autocomplete="new-password" />
                <button type="button" class="btn btn-secondary" @onclick="@TogglePassword" tabindex="-1">@_togglePassword</button>
            </div>
        </div>
    </div>
}
<div class="row mb-1 align-items-center">
    <Label Class="col-sm-3" For="encryption" HelpText="Specify if you are using an encrypted database connection. It is highly recommended to use encryption in a production environment." ResourceKey="Encryption">Encryption:</Label>
    <div class="col-sm-9">
        <select id="encryption" class="form-select custom-select" @bind="@_encryption">
            <option value="true">@SharedLocalizer["True"]</option>
            <option value="false">@SharedLocalizer["False"]</option>
        </select>
    </div>
</div>
@if (_encryption == "true")
{
	<div class="row mb-1 align-items-center">
		<Label Class="col-sm-3" For="trustservercertificate" HelpText="Specify the type of certificate you are using for encryption. Verifiable is equivalent to False. Self Signed is equivalent to True." ResourceKey="TrustServerCertificate">Certificate:</Label>
		<div class="col-sm-9">
			<select id="encryption" class="form-select custom-select" @bind="@_trustservercertificate">
				<option value="true">@Localizer["Self Signed"]</option>
				<option value="false">@Localizer["Verifiable"]</option>
			</select>
		</div>
	</div>
}

@code {
    private string _server = String.Empty;
    private string _database = "Oqtane-" + DateTime.UtcNow.ToString("yyyyMMddHHmm");
    private string _security = "integrated";
    private string _uid = String.Empty;
    private string _pwd = String.Empty;
    private string _passwordType = "password";
    private string _togglePassword = string.Empty;
    private string _encryption = "false";
    private string _trustservercertificate = "false";

    protected override void OnInitialized()
	{
        _togglePassword = SharedLocalizer["ShowPassword"];
    }

    public string GetConnectionString()
    {
        var connectionString = String.Empty;

        if (!String.IsNullOrEmpty(_server) && !String.IsNullOrEmpty(_database))
        {
            connectionString = $"Data Source={_server};Initial Catalog={_database};";
        }

        if (_security == "integrated")
        {
            connectionString += "Integrated Security=SSPI;";
        }
        else
        {
            connectionString += $"User ID={_uid};Password={_pwd};";
        }
		connectionString += $"Encrypt={_encryption};";
		connectionString += $"TrustServerCertificate={_trustservercertificate};";

        return connectionString;
    }

    private void TogglePassword()
    {
        if (_passwordType == "password")
        {
            _passwordType = "text";
            _togglePassword = SharedLocalizer["HidePassword"];
        }
        else
        {
            _passwordType = "password";
            _togglePassword = SharedLocalizer["ShowPassword"];
        }
    }
}