@page "/exam/create"
@using AutoMapper
@using TechHelper.Client.Pages.Common
@using TechHelper.Client.Pages.Exam.ExamView
@using TechHelper.Client.Services
@using Blazored.TextEditor
@using Entities.DTO
@using TechHelper.Client.Exam
@inject ILogger<Home> Logger
@inject ISnackbar Snackbar;
@using Microsoft.AspNetCore.Components
@using System.Globalization;
@using TechHelper.Client.Pages.Editor
@inject IDialogService DialogService

<MudPaper Elevation="5" Class="d-flex overflow-hidden flex-grow-1 pa-1 rounded-xl " Style="overflow:hidden; position:relative;height:100%">
	<MudDrawerContainer Class="mud-height-full flex-grow-1" Style="height:100%">
		<MudDrawer @bind-Open="@_open" Elevation="0" Variant="@DrawerVariant.Persistent" Color="Color.Primary" Anchor="Anchor.End" OverlayAutoClose="true">

			@if (_edit)
			{
				<AssignmentQuestionEdit AssignmentQuestion="selectedAssignmentQuestion" />
			}
			else
			{

				<MudDrawerHeader>
					<MudText Typo="Typo.h6"> 配置 </MudText>
				</MudDrawerHeader>

				<MudStack Class="overflow-auto">
					<ParseRoleConfig />
					<MudButton Color="Color.Success"> ParseExam </MudButton>
				</MudStack>
			}


		</MudDrawer>
		<MudStack Class="flex-grow-1 h-100">

			<MudPaper Class="rounded-xl ma-1 pa-2" Style="background-color:#fefefefe">
				<MudButton Variant="Variant.Filled" Color="Color.Secondary" Class="rounded-xl" Size="Size.Small"  OnClick="OpenEditor">文本编辑器</MudButton>
				<MudButton Variant="Variant.Filled" Color="Color.Secondary" Class="rounded-xl" Size="Size.Small"  OnClick="ParseExam">载入</MudButton>
				<MudButton Variant="Variant.Filled" Color="Color.Secondary" Class="rounded-xl" Size="Size.Small"  OnClick="OpenPublish">发布</MudButton>
				<MudButton Variant="Variant.Filled" Color="Color.Secondary" Class="rounded-xl" Size="Size.Small"  OnClick="OpenPublish">指派</MudButton>
			</MudPaper>


			<ExamView Class="overflow-auto ma-1 pa-2 rounded-xl" ClickedStruct="HandleClickedStruct" ParsedExam="ExamContent"></ExamView>

			<MudPaper MaxWidth="300">

				@if (_parsedExam.Errors.Any())
				{
					foreach (var item in _parsedExam.Errors)
					{
						<MudText> @item.Message </MudText>
					}
				}
			</MudPaper>
		</MudStack>
	</MudDrawerContainer>
</MudPaper>

@code {

	[CascadingParameter]
	private Task<AuthenticationState> authenticationStateTask { get; set; }

	private AssignmentQuestionDto selectedAssignmentQuestion = new AssignmentQuestionDto();
	private IReadOnlyCollection<string> _selected;
	private bool _open = false;
	private bool _edit = false;

	private void ToggleDrawer()
	{
		_open = !_open;
		_edit = false;
	}
	private BlazoredTextEditor _textEditor = new BlazoredTextEditor();
	private AssignmentEx _parsedExam = new AssignmentEx();
	private AssignmentDto ExamContent = new AssignmentDto();

	private ExamParserConfig _examParserConfig { get; set; } = new ExamParserConfig();
	private string EditorText = "";


	[Inject]
	public IMapper Mapper { get; set; }


	private async void OpenEditor()
	{
		var parameters = new DialogParameters<TextEditorDialog> { { x => x.TextEditor, _textEditor } };
		parameters.Add("EditorText", EditorText);

		var dialog = await DialogService.ShowAsync<TextEditorDialog>("TextEditor", parameters);
		var result = await dialog.Result;
		if (!result.Canceled)
		{
			_textEditor = result.Data as BlazoredTextEditor ?? new BlazoredTextEditor();
			await ParseExam();
		}
		StateHasChanged();
	}
	private async void OpenPublish()
	{
		var parameters = new DialogParameters<PublishExamDialog> { { x => x.Exam, ExamContent } };

		var dialog = await DialogService.ShowAsync<PublishExamDialog>("PublishExam", parameters);
		var result = await dialog.Result;
		if (!result.Canceled)
		{
			await Publish();
		}
		StateHasChanged();
	}

	private async void HandleClickedStruct(AssignmentQuestionDto dto)
	{
		// _open = true;
		// _edit = true;
		// StateHasChanged();

		var parameters = new DialogParameters<QuestionCardDialog> { { x => x.Questions, dto } };

		var dialog = await DialogService.ShowAsync<QuestionCardDialog>("Edit_Question", parameters);
		var result = await dialog.Result;
		if (!result.Canceled)
		{
		}
		StateHasChanged();
	}

	private async Task ParseExam()
	{

		var plainText = await _textEditor.GetText();
		EditorText = plainText;

		if (!string.IsNullOrWhiteSpace(plainText))
		{
			try
			{
				var exampar = new ExamParser(_examParserConfig);
				_parsedExam = exampar.ParseExamPaper(plainText);
				Snackbar.Add("试卷解析成功。", Severity.Success);
				Snackbar.Add($"{_parsedExam.Errors}。", Severity.Success);
				StateHasChanged();
				ExamContent = Mapper.Map<AssignmentDto>(_parsedExam);
				ExamContent.SeqIndex();
			}
			catch (Exception ex)
			{
				Console.WriteLine($"Error parsing exam paper: {ex.Message}");
				Console.WriteLine($"Stack Trace: {ex.StackTrace}");

				Snackbar.Add($"解析试卷时发生错误：{ex.Message}", Severity.Error);

			}
		}
		else
		{
			Snackbar.Add("试卷文本为空，无法解析。", Severity.Warning);
		}
		StateHasChanged();
	}

	[Inject]
	public IExamService examService { get; set; }


	public async Task Publish()
	{
		var apiRespon = await examService.SaveParsedExam(ExamContent);
		Snackbar.Add(apiRespon.Message);
	}

}






<!-- #region name -->
@* 			<MudButtonGroup Vertical="true" Color="Color.Primary" Variant="Variant.Filled">
				<MudIconButton Icon="@Icons.Material.Filled.Settings" OnClick="@ToggleDrawer" Color="Color.Secondary" />
				<MudIconButton Icon="@Icons.Material.Filled.TransitEnterexit" OnClick="@ParseExam" Color="Color.Secondary" />
				<MudIconButton Icon="@Icons.Material.Filled.Save" OnClick="@ToggleDrawer" Color="Color.Secondary" />
				<MudIconButton Icon="@Icons.Material.Filled.Publish" OnClick="@Publish" Color="Color.Secondary" />
			</MudButtonGroup> *@
@* 				<MudPaper Class="ma-2 h-100">
					<MudPaper Elevation="0" Style="height:calc(100% - 80px)">
						<BlazoredTextEditor  @ref="@_textEditor">
							<ToolbarContent>
								<select class="ql-header">
									<option selected=""></option>
									<option value="1"></option>
									<option value="2"></option>
									<option value="3"></option>
									<option value="4"></option>
									<option value="5"></option>
								</select>
								<span class="ql-formats">
									<button class="ql-bold"></button>
									<button class="ql-italic"></button>
									<button class="ql-underline"></button>
									<button class="ql-strike"></button>
								</span>
								<span class="ql-formats">
									<select class="ql-color"></select>
									<select class="ql-background"></select>
								</span>
								<span class="ql-formats">
									<button class="ql-list" value="ordered"></button>
									<button class="ql-list" value="bullet"></button>
								</span>
								<span class="ql-formats">
									<button class="ql-link"></button>
								</span>
							</ToolbarContent>
							<EditorContent>
							</EditorContent>
						</BlazoredTextEditor>
					</MudPaper>
				</MudPaper> *@

<!-- #endregion -->