using System.Collections.Generic;
using System.Linq;
using Sozsoft.Platform;
namespace Sozsoft.Mcp;
///
/// /mcp ucunda yayinlanan arac adlari. Ayni degerler MCP Servers ekranindaki
/// AllowedTools alaninin secenek listesini besler; buraya bir arac eklenirse ekranin
/// statik lookup listesi de guncellenir.
///
public static class McpToolNames
{
public const string ServerInfo = "server_info";
public const string ListLists = "list_lists";
public const string DescribeList = "describe_list";
public const string SearchSchema = "search_schema";
public const string QueryList = "query_list";
public const string RunSelect = "run_select";
public const string ListQueries = "list_queries";
public const string RunQuery = "run_query";
public const string InsertRow = "insert_row";
public const string UpdateRow = "update_row";
public const string DeleteRow = "delete_row";
///
/// Veri yazan araclar. Sunucu kaydinda AllowWrite kapaliysa bunlar arac listesinde
/// hic yer almaz.
///
public static readonly string[] WriteTools = [InsertRow, UpdateRow, DeleteRow];
///
/// Sunucu kaydi olmasa da acik kalan araclar. Istemcinin baglantisinin neden bos
/// gorundugunu anlayabilmesi icin gereklidir.
///
public static readonly string[] AlwaysAvailableTools = [ServerInfo];
///
/// Kullanicinin uygulamada da sahip olmasi gereken yetki. MCP yetki vermez: ham SQL'i
/// uygulamada SQL Query Manager'i kullanabilen, veri yazmayi yazma yetkisi olan kullanici
/// gorur. Listede olmayan araclar kendi icinde liste bazli yetkiyle suzulur.
///
public static readonly IReadOnlyDictionary RequiredPermissions = new Dictionary
{
[RunSelect] = PlatformConsts.AppCodes.SqlQueryManagers.Default,
[InsertRow] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write,
[UpdateRow] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write,
[DeleteRow] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write,
};
/// Yayinlanan tum araclar, arac listesindeki siralarina gore.
public static readonly string[] All =
[
ServerInfo,
ListLists,
DescribeList,
SearchSchema,
QueryList,
RunSelect,
ListQueries,
RunQuery,
InsertRow,
UpdateRow,
DeleteRow
];
///
/// AllowedTools alaninda secilebilen araclar. Her zaman acik olanlar secenek
/// olarak sunulmaz; onlari kapatmak mumkun degildir.
///
public static IEnumerable SelectableTools
=> All.Where(name => !AlwaysAvailableTools.Contains(name));
}