using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Caching.Memory;
using OnlyOneAccessTemplate.Services;
using OnlyOneAccessTemplate.Models;
namespace OnlyOneAccessTemplate.Controllers
{
public abstract class BaseController : Controller
{
protected readonly ISiteConfigurationService _siteConfig;
protected readonly ILanguageService _languageService;
protected readonly ISeoService _seoService;
protected readonly IMemoryCache _cache;
protected readonly IConfiguration _configuration;
public BaseController(
ISiteConfigurationService siteConfig,
ILanguageService languageService,
ISeoService seoService,
IMemoryCache cache,
IConfiguration configuration)
{
_siteConfig = siteConfig;
_languageService = languageService;
_seoService = seoService;
_cache = cache;
_configuration = configuration;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
var language = GetCurrentLanguage();
var config = _siteConfig.GetConfiguration(language);
var currentUrl = GetCurrentUrl();
SetupSeoViewBag(config, language, currentUrl);
SetupContentViewBag(config, language);
base.OnActionExecuting(context);
}
protected virtual string GetCurrentLanguage()
{
var path = Request.Path.Value ?? "";
if (path.StartsWith("/en"))
return "en";
if (path.StartsWith("/es"))
return "es";
return "pt"; // default
}
protected string GetCurrentUrl()
{
return $"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}";
}
protected void SetupSeoViewBag(SiteConfiguration config, string language, string currentUrl)
{
// Basic SEO
ViewBag.Language = language;
ViewBag.Direction = _languageService.GetLanguageDirection(language);
ViewBag.SiteName = config.Seo.SiteName;
ViewBag.SiteDescription = config.Seo.DefaultDescription;
ViewBag.CanonicalUrl = currentUrl;
ViewBag.Author = config.Seo.Author;
ViewBag.GTMId = config.Seo.GoogleTagManagerId;
// Default SEO values
ViewBag.Title = ViewBag.Title ?? config.Seo.DefaultTitle;
ViewBag.Description = ViewBag.Description ?? config.Seo.DefaultDescription;
ViewBag.Keywords = ViewBag.Keywords ?? config.Seo.DefaultKeywords;
// Open Graph
ViewBag.OgTitle = ViewBag.Title;
ViewBag.OgDescription = ViewBag.Description;
ViewBag.OgImage = config.Seo.OgImage;
ViewBag.OgLocale = GetOgLocale(language);
ViewBag.TwitterHandle = config.Seo.TwitterHandle;
// Language alternatives
SetupHreflangUrls(currentUrl, language);
// Current language display
ViewBag.CurrentLanguageDisplay = _languageService.GetLanguageDisplayName(language);
}
protected void SetupContentViewBag(SiteConfiguration config, string language)
{
// Navigation
ViewBag.HomeUrl = language == "pt" ? "/" : $"/{language}";
ViewBag.AboutUrl = language == "pt" ? "/about" : $"/{language}/about";
ViewBag.ContactUrl = language == "pt" ? "/contact" : $"/{language}/contact";
ViewBag.PrivacyUrl = language == "pt" ? "/privacy" : $"/{language}/privacy";
ViewBag.TermsUrl = language == "pt" ? "/terms" : $"/{language}/terms";
// Menu texts based on language
switch (language)
{
case "en":
SetupEnglishContent();
break;
case "es":
SetupSpanishContent();
break;
default:
SetupPortugueseContent();
break;
}
// Logo and branding
ViewBag.LogoUrl = "/img/logo.png";
ViewBag.BodyClass = $"lang-{language}";
// Conversion config
ViewBag.ConversionConfig = config.Conversion;
}
protected void SetupPortugueseContent()
{
// Menu
ViewBag.MenuHome = "Início";
ViewBag.MenuAbout = "Sobre";
ViewBag.MenuContact = "Contato";
ViewBag.MenuPrivacy = "Privacidade";
ViewBag.MenuTerms = "Termos";
// Hero Section
ViewBag.DefaultHeroTitle = "Transforme Seu Negócio com Nossa Solução";
ViewBag.DefaultHeroSubtitle = "Aumente suas vendas em até 300% com nossa metodologia comprovada e suporte especializado.";
ViewBag.DefaultCtaText = "Comece Agora";
ViewBag.WatchVideoText = "Assistir Vídeo";
// Features
ViewBag.DefaultFeaturesTitle = "Por Que Escolher Nossa Solução?";
ViewBag.DefaultFeaturesSubtitle = "Descubra os benefícios que já transformaram mais de 1000 empresas";
ViewBag.Feature1Title = "Resultados Rápidos";
ViewBag.Feature1Description = "Veja os primeiros resultados em até 30 dias";
ViewBag.Feature2Title = "Suporte 24/7";
ViewBag.Feature2Description = "Equipe especializada sempre disponível";
ViewBag.Feature3Title = "Metodologia Comprovada";
ViewBag.Feature3Description = "Mais de 1000 casos de sucesso documentados";
// Form
ViewBag.FormTitle = "Solicite uma Demonstração Gratuita";
ViewBag.FormSubtitle = "Preencha o formulário e nossa equipe entrará em contato";
ViewBag.NameLabel = "Nome Completo";
ViewBag.NamePlaceholder = "Digite seu nome completo";
ViewBag.EmailLabel = "E-mail";
ViewBag.EmailPlaceholder = "Digite seu e-mail";
ViewBag.PhoneLabel = "Telefone";
ViewBag.PhonePlaceholder = "Digite seu telefone";
ViewBag.SubmitButtonText = "Solicitar Demonstração";
ViewBag.LoadingText = "Enviando...";
// Quick Form
ViewBag.QuickFormTitle = "Acesso Rápido";
ViewBag.QuickSubmitText = "Começar Agora";
ViewBag.QuickConsentText = "Concordo em receber informações por e-mail";
// Validation
ViewBag.RequiredFieldMessage = "Este campo é obrigatório";
ViewBag.EmailValidationMessage = "Digite um e-mail válido";
ViewBag.PhoneValidationMessage = "Digite um telefone válido";
ViewBag.ConsentValidationMessage = "Você deve concordar para continuar";
// Consent
ViewBag.ConsentText = "Concordo em receber comunicações e com a Política de Privacidade";
// Benefits
ViewBag.BenefitsTitle = "O que você vai receber:";
ViewBag.DefaultBenefit1 = "Consultoria personalizada";
ViewBag.DefaultBenefit2 = "Suporte técnico especializado";
ViewBag.DefaultBenefit3 = "Garantia de resultados";
// Testimonials
ViewBag.DefaultTestimonialsTitle = "O Que Nossos Clientes Dizem";
ViewBag.DefaultTestimonialsSubtitle = "Mais de 1000 empresas já transformaram seus resultados";
SetupPortugueseTestimonials();
// CTA
ViewBag.DefaultCtaTitle = "Pronto para Transformar Seu Negócio?";
ViewBag.DefaultCtaSubtitle = "Junte-se a mais de 1000 empresas que já alcançaram resultados extraordinários";
ViewBag.DefaultCtaButtonText = "Começar Transformação";
// Footer
ViewBag.FooterDescription = "Transformando negócios através de soluções inovadoras";
ViewBag.FooterMenuTitle = "Links";
ViewBag.FooterLegalTitle = "Legal";
ViewBag.FooterContactTitle = "Contato";
ViewBag.FooterCopyright = "Todos os direitos reservados.";
ViewBag.FooterMadeWith = "Feito com ❤️ no Brasil";
// Success
ViewBag.SuccessTitle = "Obrigado!";
ViewBag.SuccessMessage = "Recebemos sua solicitação. Nossa equipe entrará em contato em breve.";
ViewBag.CloseButtonText = "Fechar";
// Thank You Page
ViewBag.NextStepsTitle = "O que acontece agora?";
ViewBag.Step1Title = "Análise";
ViewBag.Step1Description = "Nossa equipe analisará sua solicitação";
ViewBag.Step2Title = "Contato";
ViewBag.Step2Description = "Entraremos em contato em até 24h";
ViewBag.Step3Title = "Implementação";
ViewBag.Step3Description = "Iniciaremos sua transformação";
ViewBag.ContactInfoTitle = "Precisa falar conosco?";
ViewBag.BackToHomeText = "Voltar ao Início";
ViewBag.WhatsAppText = "Falar no WhatsApp";
ViewBag.RedirectConfirmText = "Deseja voltar à página inicial?";
// Security
ViewBag.SecurityText = "Seus dados estão seguros conosco";
// Time
ViewBag.DaysText = "Dias";
ViewBag.HoursText = "Horas";
ViewBag.MinutesText = "Min";
ViewBag.SecondsText = "Seg";
// Contact info
ViewBag.ContactEmail = "contato@seusite.com";
ViewBag.ContactPhone = "(11) 99999-9999";
ViewBag.ContactAddress = "São Paulo, SP";
ViewBag.TestimonialsCount = "Mais de 500 avaliações 5 estrelas";
}
protected void SetupEnglishContent()
{
// Menu
ViewBag.MenuHome = "Home";
ViewBag.MenuAbout = "About";
ViewBag.MenuContact = "Contact";
ViewBag.MenuPrivacy = "Privacy";
ViewBag.MenuTerms = "Terms";
// Hero Section
ViewBag.DefaultHeroTitle = "Transform Your Business with Our Solution";
ViewBag.DefaultHeroSubtitle = "Increase your sales by up to 300% with our proven methodology and expert support.";
ViewBag.DefaultCtaText = "Get Started";
ViewBag.WatchVideoText = "Watch Video";
// Features
ViewBag.DefaultFeaturesTitle = "Why Choose Our Solution?";
ViewBag.DefaultFeaturesSubtitle = "Discover the benefits that have already transformed over 1000 companies";
ViewBag.Feature1Title = "Fast Results";
ViewBag.Feature1Description = "See first results within 30 days";
ViewBag.Feature2Title = "24/7 Support";
ViewBag.Feature2Description = "Specialized team always available";
ViewBag.Feature3Title = "Proven Method";
ViewBag.Feature3Description = "Over 1000 documented success cases";
// Form
ViewBag.FormTitle = "Request a Free Demo";
ViewBag.FormSubtitle = "Fill out the form and our team will contact you";
ViewBag.NameLabel = "Full Name";
ViewBag.NamePlaceholder = "Enter your full name";
ViewBag.EmailLabel = "Email";
ViewBag.EmailPlaceholder = "Enter your email";
ViewBag.PhoneLabel = "Phone";
ViewBag.PhonePlaceholder = "Enter your phone";
ViewBag.SubmitButtonText = "Request Demo";
ViewBag.LoadingText = "Sending...";
// Quick Form
ViewBag.QuickFormTitle = "Quick Access";
ViewBag.QuickSubmitText = "Start Now";
ViewBag.QuickConsentText = "I agree to receive information by email";
// Validation
ViewBag.RequiredFieldMessage = "This field is required";
ViewBag.EmailValidationMessage = "Enter a valid email";
ViewBag.PhoneValidationMessage = "Enter a valid phone";
ViewBag.ConsentValidationMessage = "You must agree to continue";
// Consent
ViewBag.ConsentText = "I agree to receive communications and with the Privacy Policy";
// Benefits
ViewBag.BenefitsTitle = "What you'll receive:";
ViewBag.DefaultBenefit1 = "Personalized consultation";
ViewBag.DefaultBenefit2 = "Specialized technical support";
ViewBag.DefaultBenefit3 = "Results guarantee";
// Testimonials
ViewBag.DefaultTestimonialsTitle = "What Our Clients Say";
ViewBag.DefaultTestimonialsSubtitle = "Over 1000 companies have already transformed their results";
SetupEnglishTestimonials();
// CTA
ViewBag.DefaultCtaTitle = "Ready to Transform Your Business?";
ViewBag.DefaultCtaSubtitle = "Join over 1000 companies that have already achieved extraordinary results";
ViewBag.DefaultCtaButtonText = "Start Transformation";
// Footer
ViewBag.FooterDescription = "Transforming businesses through innovative solutions";
ViewBag.FooterMenuTitle = "Links";
ViewBag.FooterLegalTitle = "Legal";
ViewBag.FooterContactTitle = "Contact";
ViewBag.FooterCopyright = "All rights reserved.";
ViewBag.FooterMadeWith = "Made with ❤️ in Brazil";
// Success
ViewBag.SuccessTitle = "Thank You!";
ViewBag.SuccessMessage = "We received your request. Our team will contact you soon.";
ViewBag.CloseButtonText = "Close";
// Thank You Page
ViewBag.NextStepsTitle = "What happens next?";
ViewBag.Step1Title = "Analysis";
ViewBag.Step1Description = "Our team will analyze your request";
ViewBag.Step2Title = "Contact";
ViewBag.Step2Description = "We'll contact you within 24h";
ViewBag.Step3Title = "Implementation";
ViewBag.Step3Description = "We'll start your transformation";
ViewBag.ContactInfoTitle = "Need to talk to us?";
ViewBag.BackToHomeText = "Back to Home";
ViewBag.WhatsAppText = "Chat on WhatsApp";
ViewBag.RedirectConfirmText = "Would you like to return to the home page?";
// Security
ViewBag.SecurityText = "Your data is safe with us";
// Time
ViewBag.DaysText = "Days";
ViewBag.HoursText = "Hours";
ViewBag.MinutesText = "Min";
ViewBag.SecondsText = "Sec";
// Contact info
ViewBag.ContactEmail = "contact@yoursite.com";
ViewBag.ContactPhone = "+1 (555) 123-4567";
ViewBag.ContactAddress = "New York, NY";
ViewBag.TestimonialsCount = "Over 500 five-star reviews";
}
protected void SetupSpanishContent()
{
// Menu
ViewBag.MenuHome = "Inicio";
ViewBag.MenuAbout = "Acerca";
ViewBag.MenuContact = "Contacto";
ViewBag.MenuPrivacy = "Privacidad";
ViewBag.MenuTerms = "Términos";
// Hero Section
ViewBag.DefaultHeroTitle = "Transforma Tu Negocio con Nuestra Solución";
ViewBag.DefaultHeroSubtitle = "Aumenta tus ventas hasta un 300% con nuestra metodología probada y soporte especializado.";
ViewBag.DefaultCtaText = "Comenzar Ahora";
ViewBag.WatchVideoText = "Ver Video";
// Features
ViewBag.DefaultFeaturesTitle = "¿Por Qué Elegir Nuestra Solución?";
ViewBag.DefaultFeaturesSubtitle = "Descubre los beneficios que ya han transformado más de 1000 empresas";
ViewBag.Feature1Title = "Resultados Rápidos";
ViewBag.Feature1Description = "Ve los primeros resultados en 30 días";
ViewBag.Feature2Title = "Soporte 24/7";
ViewBag.Feature2Description = "Equipo especializado siempre disponible";
ViewBag.Feature3Title = "Metodología Probada";
ViewBag.Feature3Description = "Más de 1000 casos de éxito documentados";
// Form
ViewBag.FormTitle = "Solicita una Demo Gratuita";
ViewBag.FormSubtitle = "Completa el formulario y nuestro equipo te contactará";
ViewBag.NameLabel = "Nombre Completo";
ViewBag.NamePlaceholder = "Ingresa tu nombre completo";
ViewBag.EmailLabel = "Correo";
ViewBag.EmailPlaceholder = "Ingresa tu correo";
ViewBag.PhoneLabel = "Teléfono";
ViewBag.PhonePlaceholder = "Ingresa tu teléfono";
ViewBag.SubmitButtonText = "Solicitar Demo";
ViewBag.LoadingText = "Enviando...";
// Quick Form
ViewBag.QuickFormTitle = "Acceso Rápido";
ViewBag.QuickSubmitText = "Comenzar Ahora";
ViewBag.QuickConsentText = "Acepto recibir información por correo";
// Validation
ViewBag.RequiredFieldMessage = "Este campo es obligatorio";
ViewBag.EmailValidationMessage = "Ingresa un correo válido";
ViewBag.PhoneValidationMessage = "Ingresa un teléfono válido";
ViewBag.ConsentValidationMessage = "Debes aceptar para continuar";
// Consent
ViewBag.ConsentText = "Acepto recibir comunicaciones y la Política de Privacidad";
// Benefits
ViewBag.BenefitsTitle = "Lo que recibirás:";
ViewBag.DefaultBenefit1 = "Consultoría personalizada";
ViewBag.DefaultBenefit2 = "Soporte técnico especializado";
ViewBag.DefaultBenefit3 = "Garantía de resultados";
// Testimonials
ViewBag.DefaultTestimonialsTitle = "Lo Que Dicen Nuestros Clientes";
ViewBag.DefaultTestimonialsSubtitle = "Más de 1000 empresas ya han transformado sus resultados";
SetupSpanishTestimonials();
// CTA
ViewBag.DefaultCtaTitle = "¿Listo para Transformar Tu Negocio?";
ViewBag.DefaultCtaSubtitle = "Únete a más de 1000 empresas que ya han logrado resultados extraordinarios";
ViewBag.DefaultCtaButtonText = "Comenzar Transformación";
// Footer
ViewBag.FooterDescription = "Transformando negocios a través de soluciones innovadoras";
ViewBag.FooterMenuTitle = "Enlaces";
ViewBag.FooterLegalTitle = "Legal";
ViewBag.FooterContactTitle = "Contacto";
ViewBag.FooterCopyright = "Todos los derechos reservados.";
ViewBag.FooterMadeWith = "Hecho con ❤️ en Brasil";
// Success
ViewBag.SuccessTitle = "¡Gracias!";
ViewBag.SuccessMessage = "Recibimos tu solicitud. Nuestro equipo te contactará pronto.";
ViewBag.CloseButtonText = "Cerrar";
// Thank You Page
ViewBag.NextStepsTitle = "¿Qué pasa ahora?";
ViewBag.Step1Title = "Análisis";
ViewBag.Step1Description = "Nuestro equipo analizará tu solicitud";
ViewBag.Step2Title = "Contacto";
ViewBag.Step2Description = "Te contactaremos en 24h";
ViewBag.Step3Title = "Implementación";
ViewBag.Step3Description = "Comenzaremos tu transformación";
ViewBag.ContactInfoTitle = "¿Necesitas hablar con nosotros?";
ViewBag.BackToHomeText = "Volver al Inicio";
ViewBag.WhatsAppText = "Hablar por WhatsApp";
ViewBag.RedirectConfirmText = "¿Te gustaría volver a la página principal?";
// Security
ViewBag.SecurityText = "Tus datos están seguros con nosotros";
// Time
ViewBag.DaysText = "Días";
ViewBag.HoursText = "Horas";
ViewBag.MinutesText = "Min";
ViewBag.SecondsText = "Seg";
// Contact info
ViewBag.ContactEmail = "contacto@tusitioweb.com";
ViewBag.ContactPhone = "+34 123 456 789";
ViewBag.ContactAddress = "Madrid, España";
ViewBag.TestimonialsCount = "Más de 500 reseñas de 5 estrellas";
}
protected void SetupPortugueseTestimonials()
{
ViewBag.Testimonial1Quote = "Aumentamos nossas vendas em 250% em apenas 3 meses. Incrível!";
ViewBag.Testimonial1Name = "Maria Silva";
ViewBag.Testimonial1Position = "CEO, TechStart";
ViewBag.Testimonial2Quote = "O suporte é excepcional. Sempre prontos a ajudar quando precisamos.";
ViewBag.Testimonial2Name = "João Santos";
ViewBag.Testimonial2Position = "Diretor, InovaCorp";
ViewBag.Testimonial3Quote = "A metodologia realmente funciona. Resultados visíveis desde o primeiro mês.";
ViewBag.Testimonial3Name = "Ana Costa";
ViewBag.Testimonial3Position = "Gerente, GrowBiz";
}
protected void SetupEnglishTestimonials()
{
ViewBag.Testimonial1Quote = "We increased our sales by 250% in just 3 months. Amazing!";
ViewBag.Testimonial1Name = "Mary Johnson";
ViewBag.Testimonial1Position = "CEO, TechStart";
ViewBag.Testimonial2Quote = "The support is exceptional. Always ready to help when we need it.";
ViewBag.Testimonial2Name = "John Smith";
ViewBag.Testimonial2Position = "Director, InovaCorp";
ViewBag.Testimonial3Quote = "The methodology really works. Visible results from the first month.";
ViewBag.Testimonial3Name = "Sarah Davis";
ViewBag.Testimonial3Position = "Manager, GrowBiz";
}
protected void SetupSpanishTestimonials()
{
ViewBag.Testimonial1Quote = "Aumentamos nuestras ventas un 250% en solo 3 meses. ¡Increíble!";
ViewBag.Testimonial1Name = "María García";
ViewBag.Testimonial1Position = "CEO, TechStart";
ViewBag.Testimonial2Quote = "El soporte es excepcional. Siempre listos para ayudar cuando lo necesitamos.";
ViewBag.Testimonial2Name = "Carlos López";
ViewBag.Testimonial2Position = "Director, InovaCorp";
ViewBag.Testimonial3Quote = "La metodología realmente funciona. Resultados visibles desde el primer mes.";
ViewBag.Testimonial3Name = "Ana Rodríguez";
ViewBag.Testimonial3Position = "Gerente, GrowBiz";
}
protected void SetupHreflangUrls(string currentUrl, string currentLanguage)
{
var hreflangUrls = _languageService.GetHreflangUrls(currentUrl, currentLanguage);
ViewBag.PtUrl = hreflangUrls.GetValueOrDefault("pt", "/");
ViewBag.EnUrl = hreflangUrls.GetValueOrDefault("en", "/en");
ViewBag.EsUrl = hreflangUrls.GetValueOrDefault("es", "/es");
ViewBag.DefaultUrl = ViewBag.PtUrl;
}
protected string GetOgLocale(string language)
{
return language switch
{
"en" => "en_US",
"es" => "es_ES",
"pt" => "pt_BR",
_ => "pt_BR"
};
}
protected void SetPageSeo(string title, string description, string keywords = null, string ogImage = null)
{
ViewBag.Title = title;
ViewBag.Description = description;
ViewBag.Keywords = keywords;
if (!string.IsNullOrEmpty(ogImage))
{
ViewBag.OgImage = ogImage;
}
}
}
}