using System.Threading.Channels; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Purrse.Api.Services; using Purrse.Core.DTOs; using Purrse.Core.Interfaces.Services; using System.Security.Claims; namespace Purrse.Api.Controllers; [Authorize] [ApiController] [Route("api/ai-categorization")] public class AiCategorizationController : ControllerBase { private readonly IAiCategorizationService _aiService; private readonly Channel _classificationChannel; private Guid UserId => Guid.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!); public AiCategorizationController(IAiCategorizationService aiService, Channel classificationChannel) { _aiService = aiService; _classificationChannel = classificationChannel; } [HttpGet("settings")] public async Task> GetSettings() => Ok(await _aiService.GetSettingsAsync(UserId)); [HttpPut("settings")] public async Task> UpdateSettings(UpdateAiCategorizationSettingsRequest request) => Ok(await _aiService.UpdateSettingsAsync(UserId, request)); [HttpPost("test-connection")] public async Task> TestConnection() => Ok(await _aiService.TestConnectionAsync(UserId)); [HttpPost("classify")] public async Task ClassifyUncategorized(ClassifyUncategorizedRequest request) { var job = new ClassificationJob(UserId, request.AccountId, request.StartDate, request.EndDate, request.SearchText, request.Status); await _classificationChannel.Writer.WriteAsync(job); return Accepted(new { message = "Classification job queued" }); } }