frappe.ui.form.on('Pallet', {
    refresh: function(frm) {
        frm.add_custom_button(__('View Serials'), function() {
            frappe.set_route('List', 'Serial No', {
                'pallet': frm.doc.pallet_number || frm.doc.name
            });
        }, __('View'));
        
        frm.add_custom_button(__('Serials Spreadsheet'), function() {
            frappe.set_route('query-report', 'Serial Nos by Pallet', {
                'pallet': frm.doc.pallet_number || frm.doc.name
            });
        }, __('View'));
        
        frm.add_custom_button(__('Generate COR'), function() {
            if (!frm.doc.pallet_number) {
                frappe.msgprint('Please save the Pallet first');
                return;
            }
            var url = '/api/method/westech_r2.westech_r2.api.cor_generator.generate_cor?pallet_number=' + encodeURIComponent(frm.doc.pallet_number);
            window.open(url, '_blank');
        }, __('Actions'));
    },
    
    customer_number: function(frm) {
        var customer = frm.doc.customer_number;
        if (!customer) {
            clear_customer_fields(frm);
            return;
        }
        frappe.call({
            method: 'frappe.client.get',
            args: {doctype: 'Supplier', name: customer},
            callback: function(r) {
                if (!r.message) return;
                var s = r.message;
                if (!frm.doc.supplier) {
                    frm.set_value('supplier', s.name);
                }
                if (!frm.doc.company_name && s.supplier_name) {
                    frm.set_value('company_name', s.supplier_name);
                }
                if (s.supplier_primary_contact) {
                    frappe.call({
                        method: 'frappe.client.get',
                        args: {doctype: 'Contact', name: s.supplier_primary_contact},
                        callback: function(cr) {
                            if (!cr.message) return;
                            var ct = cr.message;
                            var full_name = [ct.first_name, ct.last_name].filter(Boolean).join(' ');
                            if (!frm.doc.contact_name) frm.set_value('contact_name', full_name);
                            if (!frm.doc.contact_number) frm.set_value('contact_number', ct.phone || ct.mobile_no || '');
                            if (!frm.doc.contact_email) frm.set_value('contact_email', ct.email_id || '');
                        }
                    });
                }
                if (s.supplier_primary_address) {
                    frappe.call({
                        method: 'frappe.client.get',
                        args: {doctype: 'Address', name: s.supplier_primary_address},
                        callback: function(ar) {
                            if (!ar.message) return;
                            var a = ar.message;
                            if (!frm.doc.address_line) frm.set_value('address_line', a.address_line1 || '');
                        }
                    });
                }
            }
        });
    }
});

function clear_customer_fields(frm) {
    frm.set_value('supplier', '');
    frm.set_value('company_name', '');
    frm.set_value('contact_name', '');
    frm.set_value('contact_number', '');
    frm.set_value('contact_email', '');
    frm.set_value('address_line', '');
}
