import { INodeType, INodeTypeDescription, IExecuteFunctions, INodeInputConfiguration, INodeOutputConfiguration, NodeConnectionType } from 'n8n-workflow';
import * as mammoth from 'mammoth';

// Расширим интерфейс для поддержки бинарных данных
declare module 'n8n-workflow' {
    interface IExecuteItem {
        binary?: {
            [key: string]: {
                data: string;
                mimeType?: string;
                fileName?: string;
            };
        };
    }
}

export class DocToText implements INodeType {
    description: INodeTypeDescription = {
        displayName: 'DOC to Text',
        name: 'docToText',
        group: ['transform'],
        version: 1,
        description: 'Convert DOC files to text using mammoth',
        defaults: {
            name: 'DOC to Text',
            color: '#772244',
        },
        inputs: [NodeConnectionType.Main],
        outputs: [NodeConnectionType.Main],
        properties: [
            {
                displayName: 'Binary Field Name',
                name: 'binaryFieldName',
                type: 'string',
                default: 'file',
                placeholder: 'file',
                required: true,
                description: 'Name of the binary field containing the DOC file (e.g., "file").',
            },
        ],
    };

    async execute(this: IExecuteFunctions) {
        const items = this.getInputData();
        const returnData = [];

        for (let i = 0; i < items.length; i++) {
            const binaryFieldName = this.getNodeParameter('binaryFieldName', i) as string;
            const item = items[i];

            if (!item.binary || !item.binary[binaryFieldName]) {
                throw new Error(`No binary data found for field "${binaryFieldName}". Please ensure a file is passed to this node.`);
            }

            const binaryData = item.binary[binaryFieldName];
            console.log('Binary data received:', binaryData);

            const buffer = Buffer.from(binaryData.data, 'base64');
            const result = await mammoth.extractRawText({ buffer });

            if (result.messages && result.messages.length > 0) {
                console.warn('Mammoth warnings:', result.messages);
            }

            returnData.push({ json: { text: result.value } });
        }

        return this.prepareOutputData(returnData);
    }
}