📄 MatDenDagen/Components/Pages/Admin/Login.razor
@page "/admin/login"
@using MatDenDagen.Services
@using Microsoft.AspNetCore.Components
@using Microsoft.AspNetCore.Components.Authorization
@inject AdminAuthService AdminAuthService
@inject NavigationManager NavigationManager
@layout AdminLayout

<h1>Admin Login</h1>

@if (errorMessage is not null)
{
  <div class="error">
    <p>@errorMessage</p>
  </div>
}

<EditForm FormName="SignIn" Model="@model" OnSubmit="@HandleSignin" Enhance>
  <p>
    <label for="password">
      <span>Lösenord:</span>
      <input type="password" name="model.Password" required />
    </label>
  </p>
  <p>
    <button type="submit">Logga in</button>
  </p>
</EditForm>

@code {
  [SupplyParameterFromForm]
  private Model? model { get; set; }

  private string? errorMessage = null;

  protected override void OnInitialized()
  {
    model ??= new();
  }

  private async Task HandleSignin()
  {
    if (string.IsNullOrWhiteSpace(model?.Password))
    {
      errorMessage = "Lösenord krävs";
      return;
    }

    if (!AdminAuthService.ValidatePassword(model.Password))
    {
      errorMessage = "Fel lösenord";
      return;
    }

    await AdminAuthService.SignIn();
    NavigationManager.NavigateTo("/admin", true);
  }

  private sealed class Model
  {
    public string? Password { get; set; }
  }
}

<style>
  .error {
    color: #c00;
    margin-bottom: 1rem;
    padding: 1em;
    background-color: rgba(200, 100, 100, 0.1);
    border-left: 4px solid #c00;
  }

  EditForm {
    max-width: 500px;
    margin: 2em auto;
    background-color: rgba(245, 240, 230, 0.8);
    border: 1px solid var(--wood-medium);
    border-radius: var(--border-radius);
    padding: 2em;
    position: relative;
  }

  EditForm::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 30px;
    background: var(--stitching-pattern);
    background-size: 16px 2px;
  }

  p {
    margin-bottom: 1rem;
  }

  label {
    display: block;
    margin-bottom: 0.5rem;
    font-weight: 600;
  }

  input {
    width: 100%;
    padding: 0.8em;
    border: 2px solid var(--wood-medium);
    border-radius: var(--border-radius);
    background-color: rgba(245, 240, 230, 0.8);
    font-family: var(--font-main);
    transition: var(--transition);
  }

  button {
    padding: 0.6rem 1.2rem;
    background-color: var(--wood-light);
    background-image: repeating-linear-gradient(45deg, var(--wood-medium), var(--wood-medium) 20px, var(--wood-dark) 20px, var(--wood-dark) 40px);
    color: var(--paper-color);
    border: 2px solid var(--wood-dark);
    border-radius: var(--border-radius);
    cursor: pointer;
    font-weight: 600;
    transition: var(--transition);
    box-shadow: var(--box-shadow);
    background-size: 40px 40px;
    opacity: 0.95;
  }

  button:hover {
    transform: translateY(-1px);
    box-shadow: 0 3px 6px rgba(0, 0, 0, 0.15);
    opacity: 1;
  }
</style>