import { logger } from '../utils/logger.js';
import { toMcpError } from '../utils/errors.js';
import { createConfirmationRequest } from '../utils/confirm.js';
import { config } from '../config.js';
/**
 * Схема входных параметров для table_update
 */
export const tableUpdateInputSchema = {
    type: 'object',
    properties: {
        tableName: {
            type: 'string',
            description: 'Имя таблицы (incident, request, user, problem, change)'
        },
        id: {
            type: 'string',
            description: 'ID записи для обновления'
        },
        data: {
            type: 'object',
            description: 'Поля для обновления',
            additionalProperties: true
        },
        confirmed: {
            type: 'boolean',
            description: 'Флаг подтверждения операции (true если пользователь подтвердил)'
        },
        display_value: {
            type: 'string',
            description: 'Возвращать отображаемые значения (true/false/1/0)'
        },
        exclude_reference_link: {
            type: 'boolean',
            description: 'Исключить ссылки для ссылочных полей'
        },
        fields: {
            type: 'string',
            description: 'Список возвращаемых полей (через запятую)'
        },
        view: {
            type: 'string',
            description: 'Представление формы для фильтрации полей'
        }
    },
    required: ['tableName', 'id', 'data']
};
/**
 * Обработчик инструмента table_update
 * Требует подтверждения перед выполнением
 */
export async function tableUpdateHandler(client, params) {
    logger.info('Запрос на обновление ресурса', {
        tableName: params.tableName,
        id: params.id,
        dataKeys: Object.keys(params.data)
    });
    // Проверка подтверждения (учитываем SIMPLEONE_AUTO_CONFIRM)
    const shouldConfirm = !params.confirmed && !config.autoConfirm;
    if (shouldConfirm) {
        const updateFields = Object.keys(params.data).join(', ');
        return createConfirmationRequest({
            operation: 'update',
            resourceType: params.tableName,
            resourceId: params.id,
            description: `Обновление полей: ${updateFields}`,
            risk: 'Данные в ESM-системе будут изменены'
        });
    }
    else if (config.autoConfirm) {
        logger.info('AUTO_CONFIRM включен — обновление без подтверждения');
    }
    try {
        const result = await client.updateResource(params.tableName, params.id, params.data, {
            display_value: params.display_value,
            exclude_reference_link: params.exclude_reference_link,
            fields: params.fields,
            view: params.view
        });
        logger.info('Ресурс обновлён', {
            tableName: params.tableName,
            id: params.id
        });
        return {
            success: true,
            data: result,
            meta: {
                operation: 'esm_update',
                tableName: params.tableName,
                resourceId: params.id,
                timestamp: new Date().toISOString()
            }
        };
    }
    catch (error) {
        const mcpError = toMcpError(error, {
            operation: 'update',
            resourceType: params.tableName
        });
        logger.error('Ошибка обновления ресурса', {
            tableName: params.tableName,
            id: params.id,
            error: mcpError.message
        });
        throw mcpError;
    }
}
/**
 * Инструмент table_update
 */
export const tableUpdateTool = {
    name: 'table_update',
    description: 'Обновление существующей записи в SimpleOne (ESM). Требует подтверждения пользователя (отключается через SIMPLEONE_AUTO_CONFIRM=true).',
    inputSchema: tableUpdateInputSchema
};
//# sourceMappingURL=table-update.js.map