@namespace Oqtane.Installer.Controls
@implements Oqtane.Interfaces.IDatabaseConfigControl
@inject IStringLocalizer<PostgreSQLConfig> 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" 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="port" HelpText="Enter the port used to connect to the server" ResourceKey="Port">Port:</Label>
    <div class="col-sm-9">
        <input id="port" type="text" class="form-control" @bind="@_port" />
    </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>
}

@code {
    private string _server = "127.0.0.1";
    private string _port = "5432";
    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;

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

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

        if (!String.IsNullOrEmpty(_server) && !String.IsNullOrEmpty(_database) && !String.IsNullOrEmpty(_port))
        {
            connectionString = $"Server={_server};Port={_port};Database={_database};";
        }

        if (_security == "integrated")
        {
            connectionString += "Integrated Security=true;";
        }
        else
        {
            if (!String.IsNullOrEmpty(_uid) && !String.IsNullOrEmpty(_pwd))
            {
                connectionString += $"User ID={_uid};Password={_pwd};";
            }
            else
            {
                connectionString = String.Empty;
            }
        }

        return connectionString;
    }

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