/**
 * Tamil Translation Module for Add Item Page
 * Handles translation between English and Tamil for UI elements
 */

(function() {
    'use strict';

    // Translation mappings
    const translations = {
        'Add New Item': 'புதிய பொருள் சேர்க்க',
        'Basic Information': 'அடிப்படை தகவல்',
        'Item Name': 'பொருளின் பெயர்',
        'Item Search Name': 'தேடல் பெயர்',
        'Alternative search name': 'மாற்று தேடல் பெயர்',
        'Description': 'விவரம்',
        'Enter item description': 'பொருள் விவரத்தை உள்ளிடவும்',
        'Category': 'வகை',
        'Brand': 'பிராண்ட்',
        'Supplier': 'சப்ளையர்',
        'Unit': 'அலகு',
        'HSN Code': 'HSN குறியீடு',
        'Barcode': 'பார்கோடு',
        'Alert Qty': 'எச்சரிக்கை அளவு',
        'Item Image': 'பொருளின் படம்',
        'Status': 'நிலை',
        'Active': 'செயலில்',
        'Inactive': 'செயலற்ற',
        'Select': 'தேர்ந்தெடு',
        'Pricing Information': 'விலை தகவல்',
        'Purchase Price': 'கொள்முதல் விலை',
        'Purchase Price (₹)': 'கொள்முதல் விலை (₹)',
        'Profit Margin %': 'இலாப சதவீதம் %',
        'Sales Price': 'விற்பனை விலை',
        'Sales Price (₹)': 'விற்பனை விலை (₹)',
        'Shop Rate': 'கடை விலை',
        'Shop Rate (₹)': 'கடை விலை (₹)',
        'Wholesale Rate': 'மொத்த விலை',
        'Wholesale Rate (₹)': 'மொத்த விலை (₹)',
        'MRP': 'அதிகபட்ச சில்லறை விலை',
        'MRP (₹)': 'அதிகபட்ச சில்லறை விலை (₹)',
        'Tax Information': 'வரி தகவல்',
        'Taxability': 'வரி விதிப்பு',
        'Taxability Type': 'வரி விதிப்பு வகை',
        'Taxable': 'வரி விதிக்கத்தக்க',
        'Non-Taxable': 'வரி விதிக்க முடியாத',
        'Tax Type': 'வரி வகை',
        'Tax': 'வரி',
        'Stock & Location': 'சரக்கு மற்றும் இடம்',
        'Location': 'இடம்',
        'Rack': 'ரேக்',
        'Opening Stock': 'தொடக்க சரக்கு',
        'Save Item': 'பொருளை சேமி',
        'Product List': 'பொருள் பட்டியல்',
        'Search products...': 'பொருட்களைத் தேடு...',
        'No products found': 'பொருட்கள் இல்லை',
        'Add Category': 'வகையைச் சேர்',
        'Add Brand': 'பிராண்டைச் சேர்',
        'Add Supplier': 'சப்ளையரைச் சேர்',
        'Add Unit': 'அலகைச் சேர்',
        'Add Location': 'இடத்தைச் சேர்',
        'Add Rack': 'ரேக்கைச் சேர்',
        'Back to Sales': 'விற்பனைக்கு திரும்பு',
        'Delete': 'நீக்கு',
        'Add Tax': 'வரியைச் சேர்',
        'Select Tax': 'வரியைத் தேர்ந்தெடு',
        'Select Location': 'இடத்தைத் தேர்ந்தெடு',
        'Select Rack': 'ரேக்கைத் தேர்ந்தெடு',
        'Category Name': 'வகை பெயர்',
        'Brand Name': 'பிராண்ட் பெயர்',
        'Supplier Name': 'சப்ளையர் பெயர்',
        'Unit Name': 'அலகு பெயர்',
        'Location Name': 'இடத்தின் பெயர்',
        'Rack Name': 'ரேக் பெயர்'
    };

    // Current language state
    let currentLanguage = 'en'; // Default to English

    /**
     * Translate a text element
     */
    function translateText(text) {
        if (currentLanguage === 'ta') {
            // First try exact match
            if (translations[text]) {
                return translations[text];
            }
            // Try without trailing symbols/currency
            const cleanText = text.replace(/\s*[\(₹\)%]+\s*$/, '').trim();
            if (translations[cleanText]) {
                const suffix = text.replace(cleanText, '');
                return translations[cleanText] + suffix;
            }
            return text;
        }
        return text;
    }

    /**
     * Get original English text from Tamil
     */
    function getOriginalText(text) {
        // Try exact match first
        for (let key in translations) {
            if (translations[key] === text) {
                return key;
            }
        }
        
        // Try without symbols
        const cleanText = text.replace(/\s*[\(₹\)%]+\s*$/, '').trim();
        for (let key in translations) {
            if (translations[key] === cleanText) {
                const suffix = text.replace(cleanText, '');
                return key + suffix;
            }
        }
        
        return text;
    }

    /**
     * Toggle language
     */
    function toggleLanguage() {
        currentLanguage = currentLanguage === 'en' ? 'ta' : 'en';
        // Don't save to localStorage - always start fresh with English
        updateUI();
        updateButtonText();
    }

    /**
     * Update button text
     */
    function updateButtonText() {
        const btn = document.getElementById('languageToggleBtn');
        if (btn) {
            if (currentLanguage === 'en') {
                btn.innerHTML = '<i class="fas fa-language"></i> த';
                btn.title = 'Switch to Tamil';
            } else {
                btn.innerHTML = '<i class="fas fa-language"></i> EN';
                btn.title = 'Switch to English';
            }
        }
    }

    /**
     * Update all UI elements
     */
    function updateUI() {
        // Update all labels
        document.querySelectorAll('label').forEach(label => {
            // Get text without the required asterisk and trim
            let originalText = '';
            const requiredSpan = label.querySelector('.required');
            
            // Get the text node content (excluding child elements)
            for (let node of label.childNodes) {
                if (node.nodeType === Node.TEXT_NODE) {
                    originalText += node.textContent;
                }
            }
            originalText = originalText.trim();
            
            if (originalText) {
                if (currentLanguage === 'ta') {
                    // Try exact match first
                    let translated = translations[originalText];
                    
                    // If no exact match, try without symbols
                    if (!translated) {
                        const cleanText = originalText.replace(/\s*[\(₹\)%]+\s*$/, '').trim();
                        if (translations[cleanText]) {
                            const suffix = originalText.replace(cleanText, '');
                            translated = translations[cleanText] + suffix;
                        }
                    }
                    
                    if (translated) {
                        // Replace text node content
                        for (let node of label.childNodes) {
                            if (node.nodeType === Node.TEXT_NODE) {
                                node.textContent = translated + ' ';
                                break;
                            }
                        }
                    }
                } else {
                    // Restore original English text
                    let currentText = '';
                    for (let node of label.childNodes) {
                        if (node.nodeType === Node.TEXT_NODE) {
                            currentText = node.textContent.trim();
                            break;
                        }
                    }
                    
                    if (currentText) {
                        // Try to get original from translation
                        let original = getOriginalText(currentText);
                        
                        // If not found, try without symbols
                        if (original === currentText) {
                            const cleanText = currentText.replace(/\s*[\(₹\)%]+\s*$/, '').trim();
                            const cleanOriginal = getOriginalText(cleanText);
                            if (cleanOriginal !== cleanText) {
                                const suffix = currentText.replace(cleanText, '');
                                original = cleanOriginal + suffix;
                            }
                        }
                        
                        if (original !== currentText) {
                            for (let node of label.childNodes) {
                                if (node.nodeType === Node.TEXT_NODE) {
                                    node.textContent = original + ' ';
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        });

        // Update section headers
        document.querySelectorAll('.section-header').forEach(header => {
            const originalText = header.textContent.trim();
            if (currentLanguage === 'ta') {
                header.textContent = translations[originalText] || originalText;
            } else {
                header.textContent = getOriginalText(originalText);
            }
        });

        // Update page title
        const pageTitle = document.querySelector('.form-header h5');
        if (pageTitle) {
            const originalText = pageTitle.textContent.trim();
            if (currentLanguage === 'ta') {
                pageTitle.textContent = translations[originalText] || originalText;
            } else {
                pageTitle.textContent = getOriginalText(originalText);
            }
        }

        // Update product list header
        const productListHeader = document.querySelector('.product-list-header h5');
        if (productListHeader) {
            const icon = productListHeader.querySelector('i');
            const originalText = productListHeader.textContent.trim();
            if (currentLanguage === 'ta') {
                productListHeader.innerHTML = (icon ? icon.outerHTML + ' ' : '') + (translations[originalText] || originalText);
            } else {
                productListHeader.innerHTML = (icon ? icon.outerHTML + ' ' : '') + getOriginalText(originalText);
            }
        }

        // Update placeholders
        document.querySelectorAll('[placeholder]').forEach(input => {
            const originalPlaceholder = input.getAttribute('data-original-placeholder') || input.placeholder;
            if (!input.hasAttribute('data-original-placeholder')) {
                input.setAttribute('data-original-placeholder', originalPlaceholder);
            }
            if (currentLanguage === 'ta') {
                input.placeholder = translations[originalPlaceholder] || originalPlaceholder;
            } else {
                input.placeholder = originalPlaceholder;
            }
        });

        // Update button text
        const saveBtn = document.querySelector('.btn-save-bottom');
        if (saveBtn) {
            const icon = saveBtn.querySelector('i');
            const originalText = saveBtn.textContent.trim();
            if (currentLanguage === 'ta') {
                saveBtn.innerHTML = (icon ? icon.outerHTML + ' ' : '') + (translations[originalText] || originalText);
            } else {
                saveBtn.innerHTML = (icon ? icon.outerHTML + ' ' : '') + 'Save Item';
            }
        }

        // Update back button title
        const backBtn = document.querySelector('.btn-back');
        if (backBtn) {
            const originalTitle = backBtn.getAttribute('data-original-title') || backBtn.title;
            if (!backBtn.hasAttribute('data-original-title')) {
                backBtn.setAttribute('data-original-title', originalTitle);
            }
            if (currentLanguage === 'ta') {
                backBtn.title = translations[originalTitle] || originalTitle;
            } else {
                backBtn.title = originalTitle;
            }
        }

        // Update select options (Status dropdown)
        const statusSelect = document.querySelector('select[name="status"]');
        if (statusSelect) {
            statusSelect.querySelectorAll('option').forEach(option => {
                const originalText = option.getAttribute('data-original-text') || option.textContent;
                if (!option.hasAttribute('data-original-text')) {
                    option.setAttribute('data-original-text', originalText);
                }
                if (currentLanguage === 'ta') {
                    option.textContent = translations[originalText] || originalText;
                } else {
                    option.textContent = originalText;
                }
            });
        }

        // Update taxability dropdown
        const taxabilitySelect = document.querySelector('select[name="taxabilityType"]');
        if (taxabilitySelect) {
            taxabilitySelect.querySelectorAll('option').forEach(option => {
                const originalText = option.getAttribute('data-original-text') || option.textContent;
                if (!option.hasAttribute('data-original-text')) {
                    option.setAttribute('data-original-text', originalText);
                }
                if (currentLanguage === 'ta') {
                    option.textContent = translations[originalText] || originalText;
                } else {
                    option.textContent = originalText;
                }
            });
        }

        // Update "Select" options in dropdowns
        document.querySelectorAll('select option[value=""]').forEach(option => {
            if (option.textContent.includes('Select') || option.textContent.includes('தேர்ந்தெடு')) {
                const match = option.textContent.match(/Select\s+(.+)/);
                if (match && currentLanguage === 'ta') {
                    const field = match[1];
                    option.textContent = translations[field] ? translations['Select'] + ' ' + translations[field] : option.textContent;
                } else if (currentLanguage === 'en') {
                    const originalText = option.getAttribute('data-original-text');
                    if (originalText) {
                        option.textContent = originalText;
                    }
                }
            }
        });

        // Update add master button titles
        document.querySelectorAll('.btn-add-master').forEach(btn => {
            const originalTitle = btn.getAttribute('data-original-title') || btn.title;
            if (!btn.hasAttribute('data-original-title')) {
                btn.setAttribute('data-original-title', originalTitle);
            }
            if (currentLanguage === 'ta') {
                btn.title = translations[originalTitle] || originalTitle;
            } else {
                btn.title = originalTitle;
            }
        });

        // Update delete button titles
        document.querySelectorAll('.btn-delete-icon').forEach(btn => {
            const originalTitle = btn.getAttribute('data-original-title') || btn.title;
            if (!btn.hasAttribute('data-original-title')) {
                btn.setAttribute('data-original-title', originalTitle);
            }
            if (currentLanguage === 'ta') {
                btn.title = translations[originalTitle] || originalTitle;
            } else {
                btn.title = originalTitle;
            }
        });

        // Update "No products found" message
        const noProducts = document.querySelector('.no-products p');
        if (noProducts) {
            const originalText = noProducts.getAttribute('data-original-text') || noProducts.textContent;
            if (!noProducts.hasAttribute('data-original-text')) {
                noProducts.setAttribute('data-original-text', originalText);
            }
            if (currentLanguage === 'ta') {
                noProducts.textContent = translations[originalText] || originalText;
            } else {
                noProducts.textContent = originalText;
            }
        }
    }

    /**
     * Initialize the translation module
     */
    function init() {
        // Always start with English - don't load saved language preference
        currentLanguage = 'en';
        
        // Clear any saved preference to ensure fresh start
        localStorage.removeItem('addItemLanguage');

        // Wait for DOM to be fully loaded
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', function() {
                setTimeout(function() {
                    updateButtonText();
                }, 100);
            });
        } else {
            setTimeout(function() {
                updateButtonText();
            }, 100);
        }
    }

    // Expose toggle function globally
    window.toggleLanguage = toggleLanguage;

    // Initialize on load
    init();
})();
