using Microsoft.AspNetCore.Mvc; using vendorApproverBackend.Services; using vendorApproverBackend.Dtos; using vendorApproverBackend.Requests; using System.Collections.Generic; using System.Threading.Tasks; namespace vendorApproverBackend.Controllers { [ApiController] [Route("api/[controller]")] public class AzureContactsController : ControllerBase { private readonly AzureContactsService _contactsService; private readonly ILogger _logger; public AzureContactsController( AzureContactsService contactsService, ILogger logger) { _contactsService = contactsService; _logger = logger; } [HttpPost("all")] public async Task>> GetAllContacts([FromBody] TokenRequest request) { try { if (string.IsNullOrEmpty(request?.AccessToken)) { return BadRequest(new { message = "Access token is required" }); } _logger.LogInformation("Fetching contacts for user"); var contacts = await _contactsService.GetUserContactsAsync(request.AccessToken); return Ok(new { success = true, count = contacts.Count, data = contacts }); } catch (Exception ex) { _logger.LogError($"Error fetching contacts: {ex.Message}"); return BadRequest(new { message = ex.Message }); } } [HttpPost("search")] public async Task>> SearchContacts([FromBody] SearchContactRequest request) { try { if (string.IsNullOrEmpty(request?.AccessToken)) { return BadRequest(new { message = "Access token is required" }); } if (string.IsNullOrEmpty(request.SearchTerm)) { return BadRequest(new { message = "Search term is required" }); } _logger.LogInformation($"Searching contacts with term: {request.SearchTerm}"); var contacts = await _contactsService.SearchContactsAsync(request.AccessToken, request.SearchTerm); return Ok(new { success = true, count = contacts.Count, data = contacts }); } catch (Exception ex) { _logger.LogError($"Error searching contacts: {ex.Message}"); return BadRequest(new { message = ex.Message }); } } [HttpPost("profile")] public async Task> GetProfile([FromBody] TokenRequest request) { try { if (string.IsNullOrEmpty(request?.AccessToken)) { return BadRequest(new { message = "Access token is required" }); } _logger.LogInformation("Fetching user profile"); var user = await _contactsService.GetUserProfileAsync(request.AccessToken); return Ok(new { success = true, data = user }); } catch (Exception ex) { _logger.LogError($"Error fetching user profile: {ex.Message}"); return BadRequest(new { message = ex.Message }); } } } }