using System.IO;
using AxCopilot.SDK;
using AxCopilot.Services;
using AxCopilot.Themes;
namespace AxCopilot.Handlers;
///
/// L5-5: 배치 파일 이름변경 핸들러. "batchren" 프리픽스로 사용합니다.
/// 예: batchren → 기능 소개 + 창 열기
/// batchren C:\work\*.xlsx → 해당 패턴 파일을 창에 미리 로드
///
public class BatchRenameHandler : IActionHandler
{
public string? Prefix => "batchren";
public PluginMetadata Metadata => new(
"BatchRename",
"배치 파일 이름변경 — batchren",
"1.0",
"AX");
public Task> GetItemsAsync(string query, CancellationToken ct)
{
var q = query.Trim();
var items = new List
{
new LauncherItem(
"배치 파일 이름변경 창 열기",
"변수 패턴 또는 정규식으로 여러 파일을 한 번에 이름변경합니다",
null,
string.IsNullOrWhiteSpace(q) ? "__open__" : q,
Symbol: Symbols.Rename),
new LauncherItem(
"변수: {name} 원본명 · {n} 순번 · {n:3} 세 자리 · {date} 날짜",
"예: 보고서_{n:3}_{date} → 보고서_001_2026-04-04.xlsx",
null, null,
Symbol: Symbols.Info),
new LauncherItem(
"변수: {ext} 확장자 · {date:yyyyMMdd} 날짜 형식 지정",
"정규식 모드: /old_pattern/new_text/ → 패턴 일치 부분 치환",
null, null,
Symbol: Symbols.Info),
};
return Task.FromResult>(items);
}
public Task ExecuteAsync(LauncherItem item, CancellationToken ct)
{
var dataStr = item.Data as string;
if (dataStr == null) return Task.CompletedTask;
System.Windows.Application.Current.Dispatcher.Invoke(() =>
{
var win = new Views.BatchRenameWindow();
// 초기 경로 패턴이 지정된 경우 파일 미리 로드
if (dataStr != "__open__" && !string.IsNullOrWhiteSpace(dataStr))
{
try
{
var dir = Path.GetDirectoryName(dataStr);
var glob = Path.GetFileName(dataStr);
if (!string.IsNullOrWhiteSpace(dir) && Directory.Exists(dir))
{
var files = Directory.GetFiles(dir, glob ?? "*");
Array.Sort(files);
win.AddFiles(files);
}
}
catch (Exception ex)
{
LogService.Warn($"BatchRenameHandler: 초기 로드 실패 — {ex.Message}");
}
}
win.Show();
});
return Task.CompletedTask;
}
}