using Gommon;
using Ryujinx.HLE.Loaders.Processes;

namespace Ryujinx.Ava.Utilities
{
    public static class TitleHelper
    {
        public static string ActiveApplicationTitle(ProcessResult activeProcess, string applicationVersion, bool customTitlebar, string pauseString = "")
        {
            if (activeProcess == null)
                return string.Empty;

            string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : $" {activeProcess.Name}";
            string titleVersionSection = string.IsNullOrWhiteSpace(activeProcess.DisplayVersion) ? string.Empty : $" v{activeProcess.DisplayVersion}";
            string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})";
            string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)";

            string appTitle = customTitlebar
                ? $"Ryujinx {applicationVersion}\n{titleNameSection.Trim()}\n{titleVersionSection.Trim()}\n{titleIdSection.Trim()}{titleArchSection}"
                : $"Ryujinx {applicationVersion} -{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}";

            return !string.IsNullOrEmpty(pauseString)
                ? appTitle + $" ({pauseString})"
                : appTitle;
        }

        public static string FormatRenderDocCaptureTitle(ProcessResult activeProcess, string applicationVersion)
        {
            if (activeProcess == null)
                return string.Empty;

            string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : activeProcess.Name;
            string titleVersionSection = string.IsNullOrWhiteSpace(activeProcess.DisplayVersion) ? string.Empty : $"v{activeProcess.DisplayVersion}";
            string titleIdSection = $"({activeProcess.ProgramIdText.ToUpper()})";
            string titleArchSection = activeProcess.Is64Bit ? "(64-bit)" : "(32-bit)";

            return CommandLineState.RenderDocCaptureTitleFormat
                .ReplaceIgnoreCase("{EmuVersion}", applicationVersion)
                .ReplaceIgnoreCase("{GuestName}", titleNameSection)
                .ReplaceIgnoreCase("{GuestVersion}", titleVersionSection)
                .ReplaceIgnoreCase("{GuestTitleId}", titleIdSection)
                .ReplaceIgnoreCase("{GuestArch}", titleArchSection);
        }
    }
}
