Files
TBDel/Services/TuiHelper.cs
T
2025-12-31 12:28:43 +03:30

149 lines
6.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using TBDel.Models;
namespace TBDel.Services
{
public static class TuiHelper
{
// Color constants for consistent styling
public static readonly ConsoleColor HeaderColor = ConsoleColor.Cyan;
public static readonly ConsoleColor SuccessColor = ConsoleColor.Green;
public static readonly ConsoleColor WarningColor = ConsoleColor.Yellow;
public static readonly ConsoleColor ErrorColor = ConsoleColor.Red;
public static readonly ConsoleColor InfoColor = ConsoleColor.White;
public static readonly ConsoleColor BorderColor = ConsoleColor.DarkGray;
// Display a styled header
public static void DisplayHeader(string title)
{
var borderLength = Math.Max(title.Length + 4, 30); // Ensure minimum length
var border = new string('═', borderLength);
Console.ForegroundColor = HeaderColor;
Console.WriteLine($"\n╔{border}╗");
// Center the title within the border
var padding = (borderLength - title.Length) / 2;
var leftPadding = padding;
var rightPadding = borderLength - title.Length - leftPadding;
var paddedTitle = new string(' ', leftPadding) + title + new string(' ', rightPadding);
Console.WriteLine($"║{paddedTitle}║");
Console.WriteLine($"╚{border}╝");
Console.ResetColor();
}
// Display a styled section separator
public static void DisplaySectionSeparator(int length = 80)
{
Console.ForegroundColor = BorderColor;
Console.WriteLine(new string('─', length));
Console.ResetColor();
}
// Display a styled table header
public static void DisplayTableHeader(string idLabel, string pathLabel, string dateLabel, int idWidth = 10, int pathWidth = 70, int dateWidth = 20)
{
Console.ForegroundColor = HeaderColor;
Console.WriteLine("{0,-" + idWidth + "} │ {1,-" + pathWidth + "} │ {2,-" + dateWidth + "}", idLabel, pathLabel, dateLabel);
DisplayTableSeparator(idWidth, pathWidth, dateWidth);
Console.ResetColor();
}
// Display a table separator line
public static void DisplayTableSeparator(int idWidth = 10, int pathWidth = 60, int dateWidth = 20)
{
Console.ForegroundColor = BorderColor;
// Calculate total width: idWidth + " │ " + pathWidth + " │ " + dateWidth
var totalWidth = idWidth + 3 + pathWidth + 3 + dateWidth; // 3 chars for " │ " separator
Console.WriteLine(new string('─', totalWidth));
Console.ResetColor();
}
// Display a table row
public static void DisplayTableRow(uint id, string path, DateTime dateAdded, int idWidth = 10, int pathWidth = 70, int dateWidth = 20)
{
var formattedDate = dateAdded.ToString("yyyy-MM-dd HH:mm");
var truncatedPath = path.Length > pathWidth ? path.Substring(0, pathWidth - 3) + "..." : path;
Console.WriteLine("{0,-" + idWidth + "} │ {1,-" + pathWidth + "} │ {2,-" + dateWidth + "}", id, truncatedPath, formattedDate);
}
// Display a confirmation prompt with styled formatting
public static bool GetConfirmation(string message)
{
Console.ForegroundColor = WarningColor;
Console.Write($"⚠ {message} (y/N): ");
Console.ResetColor();
var input = Console.ReadLine();
return input?.ToLowerInvariant() == "y";
}
// Display a success message
public static void DisplaySuccess(string message)
{
Console.ForegroundColor = SuccessColor;
Console.WriteLine($"✓ {message}");
Console.ResetColor();
}
// Display an error message
public static void DisplayError(string message)
{
Console.ForegroundColor = ErrorColor;
Console.WriteLine($"✗ {message}");
Console.ResetColor();
}
// Display an info message
public static void DisplayInfo(string message)
{
Console.ForegroundColor = InfoColor;
Console.WriteLine($" {message}");
Console.ResetColor();
}
// Display a warning message
public static void DisplayWarning(string message)
{
Console.ForegroundColor = WarningColor;
Console.WriteLine($"⚠ {message}");
Console.ResetColor();
}
// Display a styled summary box
public static void DisplaySummary(string title, params (string label, string value)[] items)
{
// Calculate the max width needed for the content
int contentWidth = Math.Max(title.Length + 2, 28); // +2 for the ─ ─ spacing around title, minimum 30 total
foreach (var (label, value) in items)
{
int itemLength = (label + ": " + value).Length;
if (itemLength > contentWidth) contentWidth = itemLength;
}
Console.ForegroundColor = HeaderColor;
var topBorder = $"┌─ {title} ─{'─'.Repeat(Math.Max(0, contentWidth - title.Length - 2))}┐";
Console.WriteLine($"\n{topBorder}");
Console.ResetColor();
foreach (var (label, value) in items)
{
var content = $"│ {label}: {value}";
var padding = contentWidth - (label.Length + value.Length + 2); // 2 for ": "
var paddedContent = content + new string(' ', padding) + "│";
Console.WriteLine(paddedContent);
}
Console.ForegroundColor = HeaderColor;
var bottomBorder = $"└{'─'.Repeat(contentWidth + 2)}┘"; // +2 for the │ │ borders
Console.WriteLine(bottomBorder);
Console.ResetColor();
}
}
// Extension method to repeat a character
public static class StringExtensions
{
public static string Repeat(this char c, int count)
{
return new string(c, count);
}
}
}