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());
}
}
}