using Microsoft.AspNetCore.Mvc; 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 { // Método GET: Apenas exibe a página com um formulário vazio. [HttpGet] public IActionResult Index() { 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) { 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()); } } }