using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;

namespace OnlyOneAccessTemplate.Models
{
    public class ModuleConfig
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; } = string.Empty;

        public string ModuleId { get; set; } = string.Empty; // Ex: "footer-message"
        public string Name { get; set; } = string.Empty;
        public string Url { get; set; } = string.Empty; // URL do endpoint externo
        public string RequestBy { get; set; } = string.Empty; // Identificador único
        public bool IsActive { get; set; } = true;
        public Dictionary<string, string> Headers { get; set; } = new();
        public Dictionary<string, object> Parameters { get; set; } = new();
        public int CacheMinutes { get; set; } = 5; // Cache do conteúdo

        public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
        public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;

        public string? JavaScriptUrl { get; set; } // URL do arquivo JS
        public string? JavaScriptFunction { get; set; } // Função de inicialização
        public string? CssUrl { get; set; } // CSS opcional
        public Dictionary<string, string> Assets { get; set; } = new(); // Assets adicionais

        // ADICIONAR na classe ModuleConfig existente:

        // Configurações de Proxy Dinâmico
        public string? ProxyEndpoint { get; set; } // "/api/modules/{moduleId}"
        public Dictionary<string, string> ProxyMappings { get; set; } = new(); // endpoint -> moduleUrl
        public bool UseProxy { get; set; } = true;

        // Configurações de Segurança
        public string? ApiKey { get; set; } // Gerado automaticamente
        public List<string> AllowedOrigins { get; set; } = new();
        public int RateLimitPerMinute { get; set; } = 60;

        // Configurações de Menu
        public string? MenuTitle { get; set; }
        public string? MenuDescription { get; set; }
        public string? MenuIcon { get; set; }
        public string? MenuCategory { get; set; } = "Conversores";
        public int MenuOrder { get; set; } = 0;
        public bool ShowInMenu { get; set; } = true;

        // Configurações de SEO
        public Dictionary<string, string> SeoTitles { get; set; } = new();
        public Dictionary<string, string> SeoDescriptions { get; set; } = new();
        public Dictionary<string, string> SeoKeywords { get; set; } = new();

        // Configurações Técnicas
        public string? HealthEndpoint { get; set; } = "/api/converter/health";
        public int HealthCheckIntervalMinutes { get; set; } = 5;
        public bool AutoStart { get; set; } = true;
        public string? Version { get; set; }
        public DateTime? LastHealthCheck { get; set; }
        public bool IsHealthy { get; set; } = false;

        // Metadados do Desenvolvedor
        public string? DeveloperName { get; set; }
        public string? DeveloperEmail { get; set; }
        public string? Repository { get; set; }
        public string? Documentation { get; set; }
    }
}
