using MeetingAssistant.Notifications; namespace MeetingAssistant.MacOs; public static class DesktopCommunicationEndpoints { public static void MapDesktopCommunication(this WebApplication app) { app.MapGet("/desktop/requests", (DesktopUserRequestStore requests) => Results.Ok(requests.List())); app.MapPost("/desktop/requests/{id}/respond", async ( string id, DesktopUserRequestResponse response, DesktopUserRequestStore requests) => { if (string.IsNullOrEmpty(response.Action)) return Results.BadRequest(); return await requests.RespondAsync(id, response.Action) switch { DesktopUserRequestRespondResult.Accepted => Results.Ok(new { status = "accepted" }), DesktopUserRequestRespondResult.InvalidAction => Results.BadRequest(new { status = "invalid-action" }), DesktopUserRequestRespondResult.NoLongerPending => Results.StatusCode(StatusCodes.Status410Gone), _ => Results.Problem("The user action could not be completed.") }; }); app.MapGet("/desktop/agent-windows", (MacOsWorkflowRulesEditorSessions sessions) => Results.Ok(sessions.GetAgentWindows())); app.MapGet("/diagnostics/settings-and-logs", () => Results.Content(MacOsWorkflowRulesEditorPage.Html, "text/html")); app.MapGet("/diagnostics/settings-and-logs/chat", IResult ( string? session, MacOsWorkflowRulesEditorSessions sessions) => { return sessions.TryGetSession(session, out var chat) ? Results.Ok(chat.GetSnapshot()) : Results.NotFound(); }); app.MapPost("/diagnostics/settings-and-logs/chat", async Task ( string? session, MacOsWorkflowRulesEditorChatRequest request, MacOsWorkflowRulesEditorSessions sessions, CancellationToken cancellationToken) => { if (!sessions.TryGetSession(session, out var chat)) return Results.NotFound(); return Results.Ok(await chat.SendAsync(request.Message, cancellationToken)); }); } } public sealed record DesktopUserRequestResponse(string? Action);