using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using ListmonkIntegration.Services; namespace ListmonkIntegration.Pages.Campaigns { public class SendModel : PageModel { private readonly IListmonkService _listmonkService; private readonly ILogger _logger; [BindProperty] public string CampaignName { get; set; } = string.Empty; [BindProperty] public int? SelectedTemplateId { get; set; } [BindProperty] public int? SelectedListId { get; set; } public SelectList Templates { get; set; } = new SelectList(Enumerable.Empty()); public SelectList Lists { get; set; } = new SelectList(Enumerable.Empty()); public string? ErrorMessage { get; set; } public string? SuccessMessage { get; set; } public SendModel(IListmonkService listmonkService, ILogger logger) { _listmonkService = listmonkService; _logger = logger; } public async Task OnGetAsync() { await LoadDataAsync(); } public async Task OnPostAsync() { if (!SelectedTemplateId.HasValue || !SelectedListId.HasValue || string.IsNullOrWhiteSpace(CampaignName)) { ErrorMessage = "Заполните все поля"; await LoadDataAsync(); return Page(); } try { var templates = await _listmonkService.GetTemplatesAsync(); var template = templates.FirstOrDefault(t => t.Id == SelectedTemplateId.Value); if (template == null) { ErrorMessage = "Шаблон не найден"; await LoadDataAsync(); return Page(); } var campaignId = await _listmonkService.CreateCampaignAsync( CampaignName, SelectedListId.Value, SelectedTemplateId.Value, template.Subject ); var started = await _listmonkService.StartCampaignAsync(campaignId); if (started) { SuccessMessage = $"Кампания \"{CampaignName}\" успешно создана и запущена!"; _logger.LogInformation($"Campaign {campaignId} started successfully"); } else { ErrorMessage = $"Кампания создана (ID: {campaignId}), но не удалось запустить"; } await LoadDataAsync(); return Page(); } catch (Exception ex) { _logger.LogError(ex, "Error sending campaign"); ErrorMessage = $"Ошибка: {ex.Message}"; await LoadDataAsync(); return Page(); } } private async Task LoadDataAsync() { try { var templates = await _listmonkService.GetTemplatesAsync(); Templates = new SelectList(templates, "Id", "Name"); var lists = await _listmonkService.GetListsAsync(); Lists = new SelectList(lists, "Id", "Name"); } catch (Exception ex) { _logger.LogError(ex, "Error loading data"); ErrorMessage = $"Ошибка загрузки данных: {ex.Message}"; } } } }