using LevelCode.License.DataAccess; using LevelCode.License.Models; using LevelCode.License.Models.Enums; using LevelCode.License.Security; using System; using System.Text.Json; namespace LevelCode.License.Business { public class LicencaService { private readonly LicencaDAL _licencaDal; public LicencaService(LicencaDAL licencaDal) { _licencaDal = licencaDal; } // ========================= // BUSCAR LICENÇA POR KEY // ========================= public ModeloLicenca ObterPorLicenseKey(string licenseKey) { if (string.IsNullOrWhiteSpace(licenseKey)) return null; return _licencaDal.BuscarPorLicenseKey(licenseKey); } // ========================= // VALIDAR LICENÇA // ========================= public bool LicencaValida(ModeloLicenca licenca, out string mensagem) { mensagem = ""; if (licenca == null) { mensagem = "Licença não encontrada."; return false; } if (licenca.Status != (int)StatusLicencaEnum.Ativa) { mensagem = "Licença inativa ou bloqueada."; return false; } if (licenca.ExpiraEm.HasValue && licenca.ExpiraEm.Value.Date < DateTime.Now.Date) { mensagem = "Licença expirada."; return false; } mensagem = "Licença válida."; return true; } // ========================= // CRIAR LICENÇA (básico) // ========================= public int CriarLicenca(ModeloLicenca modelo) { if (modelo == null) throw new ArgumentNullException(nameof(modelo)); // 🔑 GERAR LICENSE KEY AUTOMATICAMENTE modelo.LicenseKey = LicenseKeyGenerator.Gerar(); // 📦 SERIALIZAR MÓDULOS if (modelo.ModulosLista != null && modelo.ModulosLista.Count > 0) modelo.Modulos = JsonSerializer.Serialize(modelo.ModulosLista); else modelo.Modulos = "[]"; modelo.Status = 1; modelo.DataCriacao = DateTime.Now; return _licencaDal.Inserir(modelo); } // ========================= // BLOQUEAR LICENÇA // ========================= public void BloquearLicenca(int idLicenca) { _licencaDal.AtualizarStatus(idLicenca, (int)StatusLicencaEnum.Bloqueada); } // ========================= // ATIVAR LICENÇA // ========================= public void AtivarLicenca(int idLicenca) { _licencaDal.AtualizarStatus(idLicenca, (int)StatusLicencaEnum.Ativa); } } }