using BLAIzor.Data; using BLAIzor.Models; using Google.Cloud.Speech.V1; using Microsoft.EntityFrameworkCore; namespace BLAIzor.Services { public class ScopedContentService { //private readonly ApplicationDbContext _context; private readonly IServiceScopeFactory _serviceScopeFactory; public ScopedContentService(ApplicationDbContext context, IServiceScopeFactory serviceScopeFactory) { //_context = context; _serviceScopeFactory = serviceScopeFactory; } public string CurrentDOM { get; set; } public string currentLocale { get; set; } public string SelectedDocument { get; set; } = "Poppixel.docx"; private string _selectedBrandName; public string SelectedBrandName { get => _selectedBrandName; set { if (_selectedBrandName != value) { _selectedBrandName = value; OnBrandNameChanged?.Invoke(); } } } public event Action OnBrandNameChanged; public int SelectedSiteId { get; set; } = 1; //public string SelectedDocument { get; set; } = "Poppixel.docx"; //public string SelectedBrandName //{ // get { return SelectedDocument.Split('.')[0]; } // set { } //} public string SelectedLanguage { get; set; } = "English"; public string SessionId { get; set; } public async Task GetSiteInfoByIdAsync(int SiteInfoId) { using (var scope = _serviceScopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); // Now use dbContext safely without violating DI rules var result = await _context.SiteInfos.Where(x => x.Id == SiteInfoId).FirstOrDefaultAsync(); if (result == null) { return await _context.SiteInfos.FirstOrDefaultAsync(); } else { return result; } } } public async Task GetSiteInfoWithFormsByIdAsync(int siteId) { using (var scope = _serviceScopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); // Now use dbContext safely without violating DI rules var result = await _context.SiteInfos.Include(s => s.FormDefinitions).FirstOrDefaultAsync(s => s.Id == siteId); if (result == null) { return new SiteInfo(); } else { return result; } } } public async Task GetSiteInfoByNameAsync(string siteName) { using (var scope = _serviceScopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); // Now use dbContext safely without violating DI rules var result = await _context.SiteInfos.Where(x => x.SiteName == siteName).FirstOrDefaultAsync(); if (result == null) { return await _context.SiteInfos.FirstOrDefaultAsync(); } else { return result; } } } public async Task GetSiteInfoByUrlAsync(string url) { using (var scope = _serviceScopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); // Now use dbContext safely without violating DI rules var result = await _context.SiteInfos.Where(x => x.DefaultUrl == url).FirstOrDefaultAsync(); if (result == null) { return await _context.SiteInfos.FirstOrDefaultAsync(); } else { return result; } } } public async Task UpdateSiteInfoAsync(SiteInfo siteInfo) { using (var scope = _serviceScopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); // Now use dbContext safely without violating DI rules _context.SiteInfos.Update(siteInfo); await _context.SaveChangesAsync(); } } public async Task> GetUserSitesAsync(string userId) { using (var scope = _serviceScopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); // Now use dbContext safely without violating DI rules return await _context.SiteInfos .Where(s => s.UserId == userId) .ToListAsync(); } } public async Task> GetSitesAsync() { using (var scope = _serviceScopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); // Now use dbContext safely without violating DI rules return await _context.SiteInfos.ToListAsync(); } } public async Task AddSiteInfoAsync(SiteInfo siteInfo) { using (var scope = _serviceScopeFactory.CreateScope()) { var _context = scope.ServiceProvider.GetRequiredService(); // Now use dbContext safely without violating DI rules if (siteInfo == null) throw new ArgumentNullException(nameof(siteInfo), "SiteInfo cannot be null."); try { await _context.SiteInfos.AddAsync(siteInfo); await _context.SaveChangesAsync(); return siteInfo; } catch (Exception ex) { // Log the exception (using a logging framework like Serilog, NLog, etc.) throw new InvalidOperationException("An error occurred while adding the site info.", ex); } } } } }