using System.Windows;
using Microsoft.Extensions.DependencyInjection;
using MergeHub.Services;
using MergeHub.ViewModels;
using MergeHub.Views;
using UbisamBase.Core.Modules;
using UbisamBase.Core.Setup;
namespace MergeHub
{
///
/// UbisamBase.Shell.exe 가 리플렉션으로 찾아 로드하는 단일 진입점.
/// 이 dll 자체는 실행 파일이 아니다.
///
public class AppSetup : IAppSetup
{
public string GetAppName() => "MergeHub - 사내 Git Merge/Diff";
public void RegisterViews(ITabManager manager)
{
// 머지툴은 3분할 비교라 가로 공간이 곧 성능이다.
// 셸 기본 여백(26,22)을 없애고 창 전체를 쓴다 - 안쪽 여백은 HomeView가 직접 준다.
// 이 키는 테마 전환에도 유지되므로 한 번만 덮어쓰면 되고,
// ShellWindow가 창 생성 시점에 읽어가므로 RegisterViews 안에서 정해야 한다.
if (Application.Current is { } app)
app.Resources["Ubisam.Metric.ContentPadding"] = new Thickness(0);
// 탭 순서는 실제 작업 순서를 따른다.
// 폴더 비교로 "어느 파일이 다른가"를 먼저 보고 → 그 파일을 골라 파일 비교로 들어가고
// → 필요하면 Git 으로 커밋한다.
// 폴더 비교에서 항목을 더블클릭하면 파일 비교 탭으로 넘어가므로 흐름이 이어진다.
manager.AddMain(Icon.Folder, ViewIds.Folder, "폴더 비교");
manager.AddMain(Icon.Document, ViewIds.Home, "파일 비교");
manager.AddMain(Icon.Link, ViewIds.Git, "Git");
}
public void RegisterSettings(ITabManager manager)
{
manager.AddSettingsSub(TabManager.SettingsTabKey, "MergeHub");
}
public void RegisterServices(IServiceCollection services)
{
// Git 조작 계층. Repository 핸들 하나를 화면 전체가 공유하므로 싱글턴.
services.AddSingleton();
// 홈(머지툴) 탭과 Git 탭이 함께 보는 저장소 상태. 호출 직렬화도 여기서 한다.
services.AddSingleton();
}
}
/// AddMain/AddSub 에서 탭을 다시 찾을 때 쓰는 키.
public static class ViewIds
{
public const string Home = "MergeHub.Home";
public const string Folder = "MergeHub.Folder";
public const string Git = "MergeHub.Git";
}
}