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.HeicToJpgTitle = _localizer["HeicToJpgTitle"];
ViewBag.DocumentMenuTitle = _localizer["DocumentMenuTitle"];
ViewBag.PdfToTextTitle = _localizer["PdfToTextTitle"];
ViewBag.PdfBarcodeTitle = _localizer["PdfBarcodeTitle"];
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"];
ViewBag.MetaDescription = ViewBag.PageTitle;
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"];
ViewBag.MetaDescription = ViewBag.PageTitle;
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());
}
}
}