using CMSMicroservice.Application.DayaLoanCQ.Services; using CMSMicroservice.Domain.Enums; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; namespace CMSMicroservice.Infrastructure.Services; /// /// Mock Implementation برای شبیه‌سازی Daya API /// این کلاس فقط برای تست و توسعه است و باید با Implementation واقعی جایگزین شود /// public class MockDayaLoanApiService : IDayaLoanApiService { private readonly ILogger _logger; public MockDayaLoanApiService(ILogger logger) { _logger = logger; } public async Task> CheckLoanStatusAsync( List nationalCodes, CancellationToken cancellationToken = default) { _logger.LogWarning("⚠️ Using MOCK Daya API Service - Replace with real implementation!"); // شبیه‌سازی تاخیر شبکه await Task.Delay(100, cancellationToken); var results = new List(); foreach (var nationalCode in nationalCodes) { // شبیه‌سازی: کدملی‌هایی که با 1 شروع می‌شوند وام گرفته‌اند if (nationalCode.StartsWith("1")) { results.Add(new DayaLoanStatusResult { NationalCode = nationalCode, Status = DayaLoanStatus.PendingReceive, ContractNumber = $"MOCK-DAYA-{nationalCode}-{DateTime.Now.Ticks}" }); } // شبیه‌سازی: کدملی‌هایی که با 2 شروع می‌شوند رد شده‌اند else if (nationalCode.StartsWith("2")) { results.Add(new DayaLoanStatusResult { NationalCode = nationalCode, Status = DayaLoanStatus.Rejected, ContractNumber = null }); } // بقیه: هنوز بررسی نشده‌اند else { results.Add(new DayaLoanStatusResult { NationalCode = nationalCode, Status = DayaLoanStatus.PendingReceive, ContractNumber = null // هنوز قرارداد صادر نشده }); } } _logger.LogInformation("Mock Daya API returned {Count} results", results.Count); return results; } } /// /// Real Implementation برای API واقعی دایا /// TODO: این کلاس باید پیاده‌سازی شود زمانی که API دایا آماده شد /// public class DayaLoanApiService : IDayaLoanApiService { private readonly HttpClient _httpClient; private readonly ILogger _logger; public DayaLoanApiService(HttpClient httpClient, ILogger logger) { _httpClient = httpClient; _logger = logger; } public async Task> CheckLoanStatusAsync( List nationalCodes, CancellationToken cancellationToken = default) { // TODO: پیاده‌سازی واقعی API دایا // مثال: // var request = new DayaApiRequest { NationalCodes = nationalCodes }; // var response = await _httpClient.PostAsJsonAsync("/api/loan/check", request, cancellationToken); // response.EnsureSuccessStatusCode(); // var result = await response.Content.ReadFromJsonAsync(cancellationToken); // return MapToResults(result); throw new NotImplementedException("Real Daya API is not implemented yet. Use MockDayaLoanApiService for testing."); } }