import i18n from "./i18n";
const notificationDictionaryFunctions = [
    (text, locale) => {
        const re = /^You have a new ticket (#?\d+)$/i;
        if (re.test(text)) {
            return {
                en: text.replace(re, 'You have a new ticket $1'),
                th: text.replace(re, 'คุณได้รับทิกเก็ตใหม่ หมายเลข $1')
            }[locale];
        }
    },
    (text, locale) => {
        const re = /^Admin (.+?) transfer (#?\d+) to you$/i;
        if (re.test(text)) {
            return {
                en: text.replace(re, 'Admin $1 transfer $2 to you'),
                th: text.replace(re, 'แอดมิน $1 โอนทิกเก็ตหมายเลข $2 ให้คุณ')
            }[locale];
        }
    },
    (text, locale) => {
        const re = /^You have received ticket (#?\d+) from ((?:auto\s)?assign)$/i;
        const matches = text.match(re);
        if (matches) {
            const [, , source] = matches;
            switch (source) {
                case 'assign':
                    return {
                        en: text.replace(re, 'You have received ticket $1 from assign'),
                        th: text.replace(re, 'คุณได้รับทิกเก็ตหมายเลข $1 จากการมอบหมาย')
                    }[locale];
                case 'auto assign':
                    return {
                        en: text.replace(re, 'You have received ticket $1 from auto assign'),
                        th: text.replace(re, 'คุณได้รับทิกเก็ตหมายเลข $1 จากระบบมอบหมายอัตโนมัติ')
                    }[locale];
            }
        }
    },
    (text, locale) => {
        const re = /^Ticket (#?\d+) has new message from customer (.+)$/i;
        if (re.test(text)) {
            return {
                en: text.replace(re, 'Ticket $1 has new message from customer $2'),
                th: text.replace(re, 'ทิกเก็ตหมายเลข $1 มีข้อความจากลูกค้า $2')
            }[locale];
        }
    }
];
const ticketDictionaryFunctions = [
    (text, locale) => {
        const re = /^system create ticket$/i;
        if (re.test(text)) {
            return {
                en: 'System create ticket',
                th: 'ระบบสร้างทิกเก็ต'
            }[locale];
        }
    },
    (text, locale) => {
        const re = /^(Ticket|Update ticket|Assigned ticket|RE-ASSIGN ticket|TRANSFER ticket|Business user|Customer reply message): ([\s\S]+)$/im;
        const matches = text.match(re);
        if (matches) {
            const [, type, message] = matches;
            switch (type) {
                case 'Ticket': {
                    const translate = () => {
                        const re = /^(#?\d+) is closed$/i;
                        return {
                            en: message.replace(re, '$1 is closed'),
                            th: message.replace(re, 'หมายเลข $1 ปิดแล้ว')
                        }[locale];
                    };
                    return {
                        en: `${type}: ${translate()}`,
                        th: `ทิกเก็ต: ${translate()}`
                    }[locale];
                }
                case 'Update ticket': {
                    const translate = () => {
                        const translateFirstLine = (text) => {
                            const re = /^(#?\d+) information$/i;
                            return {
                                en: text.replace(re, '$1 information'),
                                th: text.replace(re, 'ข้อมูลของหมายเลข $1')
                            }[locale];
                        };
                        const translateRestLine = (text) => {
                            const re = /^- Change (.+?) to: (.+)$/i;
                            return {
                                en: text.replace(re, '- Change $1 to: $2'),
                                th: text.replace(re, '- เปลี่ยน $1 เป็น $2')
                            }[locale];
                        };
                        const [firstLine, ...restLine] = message.split('\n');
                        return [
                            translateFirstLine(firstLine),
                            ...restLine.map(translateRestLine)
                        ].join('\n');
                    };
                    return {
                        en: `${type}: ${translate()}`,
                        th: `อัปเดตทิกเก็ต: ${translate()}`
                    }[locale];
                }
                case 'Assigned ticket': {
                    const translate = () => {
                        const re = /^(#?\d+) to:? (.+)$/i;
                        return {
                            en: message.replace(re, '$1 to: $2'),
                            th: message.replace(re, 'หมายเลข $1 ให้กับ $2')
                        }[locale];
                    };
                    return {
                        en: `${type}: ${translate()}`,
                        th: `มอบหมายทิกเก็ต: ${translate()}`
                    }[locale];
                }
                case 'RE-ASSIGN ticket': {
                    const translate = () => {
                        const re = /^(#?\d+) from:? (.+) to:? (.+)$/i;
                        return {
                            en: message.replace(re, '$1 from: $2 to: $3'),
                            th: message.replace(re, 'หมายเลข $1 ใหม่ จากผู้ใช้ $2 ให้กับผู้ใช้ $3')
                        }[locale];
                    };
                    return {
                        en: `${type}: ${translate()}`,
                        th: `มอบหมายทิกเก็ต: ${translate()}`
                    }[locale];
                }
                case 'TRANSFER ticket': {
                    const translate = () => {
                        const re = /^(#?\d+) from:? (.+) to:? (.+)$/i;
                        return {
                            en: message.replace(re, '$1 from: $2 to: $3'),
                            th: message.replace(re, 'หมายเลข $1 จากผู้ใช้ $2 ไปยังผู้ใช้ $3')
                        }[locale];
                    };
                    return {
                        en: `${type}: ${translate()}`,
                        th: `โอนทิกเก็ต: ${translate()}`
                    }[locale];
                }
                case 'Business user': {
                    const translate = () => {
                        const messageFunctions = [
                            () => {
                                const re = /^(.+?) pick up ticket: (#?\d+)$/i;
                                if (re.test(message)) {
                                    return {
                                        en: message.replace(re, '$1 pick up ticket: $2'),
                                        th: message.replace(re, '$1 รับทิกเก็ตหมายเลข $2 เข้าดูแล')
                                    }[locale];
                                }
                            },
                            () => {
                                const re = /^system reply message: (.+) to customer$/i;
                                if (re.test(message)) {
                                    return {
                                        en: message.replace(re, 'System reply message: $1 to customer'),
                                        th: message.replace(re, 'ระบบส่งข้อความ $1 ตอบกลับให้ลูกค้า')
                                    }[locale];
                                }
                            }
                        ];
                        for (const messageFunction of messageFunctions) {
                            const returnedMessage = messageFunction();
                            if (returnedMessage) {
                                return returnedMessage;
                            }
                        }
                    };
                    return {
                        en: `${type}: ${translate()}`,
                        th: `ผู้ใช้งาน: ${translate()}`
                    }[locale];
                }
                case 'Customer reply message': {
                    const translate = () => {
                        const translateTarget = (text) => ({
                            chatbot: {
                                en: 'chatbot',
                                th: 'แชทบอท'
                            },
                            'business user': {
                                en: 'business user',
                                th: 'ผู้ใช้งาน'
                            }
                        })[text]?.[locale];
                        const matches = message.match(/^(.+) to (.+)$/i);
                        if (matches) {
                            const [, text, target] = matches;
                            return {
                                en: `${text} to ${translateTarget(target)}`,
                                th: `${text} ตอบกลับไปยัง ${translateTarget(target)}`
                            }[locale];
                        }
                    };
                    return {
                        en: `${type}: ${translate()}`,
                        th: `ลูกค้าส่งข้อความ: ${translate()}`
                    }[locale];
                }
                default:
                    return `${type}: ${message}`;
            }
        }
    }
];
const dictionaryFunctions = [
    ...notificationDictionaryFunctions,
    ...ticketDictionaryFunctions
];
const useRegexTranslation = () => {
    const locale = i18n.language;
    const translate = (text) => {
        try {
            const translatedText = (() => {
                for (const dictionaryFunction of dictionaryFunctions) {
                    const returnedValue = dictionaryFunction(text, locale);
                    if (returnedValue) {
                        return returnedValue;
                    }
                }
            })();
            return translatedText ?? text;
        }
        catch (error) {
            console.error(error);
            return text;
        }
    };
    return translate;
};
export default useRegexTranslation;
