📄 MatDenDagen/Components/Pages/Admin/Questions.razor
@page "/admin/questions"
@using MatDenDagen.Infrastructure.Storage.Database
@using MatDenDagen.Models
@using Microsoft.EntityFrameworkCore
@inject TimeProvider timeProvider
@inject QuestionnaireContext questionnaireContext

<ul>
  @foreach (var question in questionnaireContext.Questions)
  {
    <li>
      <span>@question.Text</span>
      <EditForm FormName="@($"RemoveQuestion-{question.Id}")" Model="@removeQuestionModel" OnSubmit="@RemoveQuestion"
                Enhance>
        <input type="hidden" name="removeQuestionModel.QuestionId" value="@question.Id" />
        <input type="submit" value="Ta bort" />
      </EditForm>
    </li>
  }
</ul>

<hr />

<EditForm FormName="AddQuestion" Model="@addQuestionModel" OnSubmit="@AddQuestion" Enhance>
  <p>
    <label>
      <span>Fråga:</span>
      <input type="text" name="addQuestionModel.Text" required />
    </label>
  </p>
  <p>
    <input type="submit" value="Lägg till" />
  </p>
</EditForm>

@code {
  [SupplyParameterFromForm]
  private AddQuestionModel? addQuestionModel { get; set; }

  [SupplyParameterFromForm]
  private RemoveQuestionModel? removeQuestionModel { get; set; }

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

  private async Task AddQuestion()
  {
    if (addQuestionModel?.Text is not string text)
    {
      return;
    }
    var question = new Question { Id = Guid.CreateVersion7(timeProvider.GetUtcNow()), Text = text };
    questionnaireContext.Questions.Add(question);
    await questionnaireContext.SaveChangesAsync();
  }

  private async Task RemoveQuestion()
  {
    if (removeQuestionModel?.QuestionId is not string questionId || !Guid.TryParse(questionId, out var id))
    {
      return;
    }
    var question = questionnaireContext.Questions.SingleOrDefault(q => q.Id == id);
    if (question is null)
    {
      return;
    }
    questionnaireContext.Questions.Remove(question);
    await questionnaireContext.SaveChangesAsync();
  }

  private sealed class AddQuestionModel
  {
    public string? Text { get; set; }
  }

  private sealed class RemoveQuestionModel
  {
    public string? QuestionId { get; set; }
  }
}