using System.ComponentModel;
using ClaudeDo.Data;
using ClaudeDo.Data.Repositories;
using Microsoft.EntityFrameworkCore;
using ModelContextProtocol.Server;

namespace ClaudeDo.Worker.External;

public sealed record AppSettingsReadDto(
    string DefaultModel, int DefaultMaxTurns, string DefaultPermissionMode,
    int MaxParallelExecutions,
    string WorktreeStrategy, string? CentralWorktreeRoot,
    bool WorktreeAutoCleanupEnabled, int WorktreeAutoCleanupDays);

[McpServerToolType]
public sealed class AppSettingsMcpTools
{
    private readonly IDbContextFactory<ClaudeDoDbContext> _dbFactory;

    public AppSettingsMcpTools(IDbContextFactory<ClaudeDoDbContext> dbFactory) => _dbFactory = dbFactory;

    [McpServerTool, Description("Read the worker's global defaults (model, max turns, permission mode, max parallel execution slots, worktree strategy) that apply when a task/list doesn't override them. Read-only.")]
    public async Task<AppSettingsReadDto> GetAppSettings(CancellationToken cancellationToken)
    {
        using var ctx = await _dbFactory.CreateDbContextAsync(cancellationToken);
        var row = await new AppSettingsRepository(ctx).GetAsync(cancellationToken);
        return new AppSettingsReadDto(
            row.DefaultModel, row.DefaultMaxTurns, row.DefaultPermissionMode,
            row.MaxParallelExecutions,
            row.WorktreeStrategy, row.CentralWorktreeRoot,
            row.WorktreeAutoCleanupEnabled, row.WorktreeAutoCleanupDays);
    }
}
