@namespace Oqtane.Modules.Admin.Roles
@inherits ModuleBase
@inject NavigationManager NavigationManager
@inject IRoleService RoleService
@inject IStringLocalizer<Edit> Localizer

<table class="table table-borderless">
    <tr>
        <td>
            <Label For="name" HelpText="Name Of The Role" ResourceKey="Name">Name:</Label>
        </td>
        <td>
            <input id="name" class="form-control" @bind="@_name" />
        </td>
    </tr>
    <tr>
        <td>
            <Label For="description" HelpText="A Short Description Of The Role Which Describes Its Purpose" ResourceKey="Description">Description:</Label>
        </td>
        <td>
            <textarea id="description" class="form-control" @bind="@_description" rows="5"></textarea>
        </td>
    </tr>
    <tr>
        <td>
            <Label For="isautoassigned" HelpText="Indicates Whether Or Not New Users Are Automatically Assigned To This Role" ResourceKey="AutoAssigned">Auto Assigned?</Label>
        </td>
        <td>
            <select id="isautoassigned" class="form-control" @bind="@_isautoassigned">
                <option value="True">@Localizer["Yes"]</option>
                <option value="False">@Localizer["No"]</option>
            </select>
        </td>
    </tr>
</table>
<button type="button" class="btn btn-success" @onclick="SaveRole">@Localizer["Save"]</button>
<NavLink class="btn btn-secondary" href="@NavigateUrl()">@Localizer["Cancel"]</NavLink>

@code {
    private int _roleid;
    private string _name = string.Empty;
    private string _description = string.Empty;
    private string _isautoassigned = "False";

    public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;

    protected override async Task OnInitializedAsync()
    {
        try
        {
            _roleid = Int32.Parse(PageState.QueryString["id"]);
            var role = await RoleService.GetRoleAsync(_roleid);
            if (role != null)
            {
                _name = role.Name;
                _description = role.Description;
                _isautoassigned = role.IsAutoAssigned.ToString();
            }
        }
        catch (Exception ex)
        {
            await logger.LogError(ex, "Error Loading Role {RoleId} {Error}", _roleid, ex.Message);
            AddModuleMessage(Localizer["Error Loading Role"], MessageType.Error);
        }
    }

    private async Task SaveRole()
    {
        var role = await RoleService.GetRoleAsync(_roleid);
        role.Name = _name;
        role.Description = _description;
        role.IsAutoAssigned = (_isautoassigned != null && Boolean.Parse(_isautoassigned));
        role.IsSystem = false;

        try
        {
            role = await RoleService.UpdateRoleAsync(role);
            await logger.LogInformation("Role Saved {Role}", role);
            NavigationManager.NavigateTo(NavigateUrl());
        }
        catch (Exception ex)
        {
            await logger.LogError(ex, "Error Saving Role {Role} {Error}", role, ex.Message);
            AddModuleMessage(Localizer["Error Saving Role"], MessageType.Error);
        }
    }
}
