using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; using System.ComponentModel.DataAnnotations; using System.Text.RegularExpressions; namespace Convert_It_Online.Areas.TextTools.Controllers { /// /// ViewModel para a ferramenta de conversão de texto. /// public class CaseConverterViewModel { [Display(Name = "Seu texto")] public string? InputText { get; set; } public string? ResultText { get; set; } // Usado para saber qual botão foi pressionado no formulário public string? ConversionType { get; set; } } [Area("TextTools")] public class CaseConverterController : Controller { private readonly IStringLocalizer _localizer; public CaseConverterController(IStringLocalizer localizer) { _localizer = localizer; } private void SetCommonViewBagProperties() { ViewBag.HomeLink = _localizer["HomeLink"]; ViewBag.TextMenuTitle = _localizer["TextMenuTitle"]; ViewBag.ImageMenuTitle = _localizer["ImageMenuTitle"]; ViewBag.CaseConverterTitle = _localizer["CaseConverterTitle"]; ViewBag.JpgToWebpTitle = _localizer["JpgToWebpTitle"]; ViewBag.FooterText = _localizer["FooterText"]; ViewBag.About = _localizer["About"]; ViewBag.Contact = _localizer["Contact"]; ViewBag.Terms = _localizer["Terms"]; } // Método GET: Apenas exibe a página com um formulário vazio. [HttpGet] public IActionResult Index() { SetCommonViewBagProperties(); ViewBag.PageTitle = _localizer["TextToolsPageTitle"]; ViewBag.TextAreaLabel = _localizer["TextAreaLabel"]; ViewBag.ToUpperButton = _localizer["ToUpperButton"]; ViewBag.ToLowerButton = _localizer["ToLowerButton"]; ViewBag.ToSentenceCaseButton = _localizer["ToSentenceCaseButton"]; ViewBag.ResultTitle = _localizer["ResultTitle"]; // FAQ properties ViewBag.FaqWhatTitle = _localizer["CaseFaqWhatTitle"]; ViewBag.FaqWhatContent = _localizer["CaseFaqWhatContent"]; ViewBag.FaqHowTitle = _localizer["CaseFaqHowTitle"]; ViewBag.FaqHowContent = _localizer["CaseFaqHowContent"]; ViewBag.FaqWhyTitle = _localizer["CaseFaqWhyTitle"]; ViewBag.FaqWhyContent = _localizer["CaseFaqWhyContent"]; ViewBag.FaqSecurityTitle = _localizer["CaseFaqSecurityTitle"]; ViewBag.FaqSecurityContent = _localizer["CaseFaqSecurityContent"]; ViewBag.FaqLimitsTitle = _localizer["CaseFaqLimitsTitle"]; ViewBag.FaqLimitsContent = _localizer["CaseFaqLimitsContent"]; var model = new CaseConverterViewModel(); return View(model); } // Método POST: Recebe o formulário, processa e retorna o resultado. [HttpPost] [ValidateAntiForgeryToken] public IActionResult Index([FromForm] CaseConverterViewModel model) { SetCommonViewBagProperties(); ViewBag.PageTitle = _localizer["TextToolsPageTitle"]; ViewBag.TextAreaLabel = _localizer["TextAreaLabel"]; ViewBag.ToUpperButton = _localizer["ToUpperButton"]; ViewBag.ToLowerButton = _localizer["ToLowerButton"]; ViewBag.ToSentenceCaseButton = _localizer["ToSentenceCaseButton"]; ViewBag.ResultTitle = _localizer["ResultTitle"]; if (!ModelState.IsValid || string.IsNullOrEmpty(model.InputText)) { // Se o modelo for inválido ou o texto estiver vazio, retorna a view sem fazer nada. return View(model); } // Executa a conversão baseada no valor do botão pressionado model.ResultText = model.ConversionType switch { "upper" => model.InputText.ToUpper(), "lower" => model.InputText.ToLower(), "sentence" => ToSentenceCase(model.InputText), _ => model.InputText // Caso padrão, não faz nada }; // Retorna a mesma view, agora com o modelo preenchido (InputText e ResultText) return View(model); } /// /// Converte uma string para "Sentence case", onde a primeira letra de cada sentença é maiúscula. /// private string ToSentenceCase(string input) { if (string.IsNullOrEmpty(input)) return input; var lowerCase = input.ToLower(); // Regex para encontrar o primeiro caractere da string ou o primeiro caractere após um ponto e espaço. var r = new Regex(@"(^[a-z])|\.\s+(.)", RegexOptions.ExplicitCapture); return r.Replace(lowerCase, s => s.Value.ToUpper()); } } }