/**
 * WooCommerce ülke alanını kaldırır, Türkiye'yi varsayılan ülke yapar ancak adresler sayfasında ve ödeme sayfasında ülke görünmez. Ödeme sayfasında ve sipariş detay sayfasında eğer girilmiş ise firma adı, vergi numarası ve vergi dairesi görünür. Inputlar da sıralanmıştır. City select eklentisi yüklenmelidir. https://tr.wordpress.org/plugins/wc-city-select/
 */

// 1. Ödeme sayfasından ülke alanını kaldır
add_filter('woocommerce_checkout_fields', 'remove_country_field_completely');
function remove_country_field_completely($fields) {
    // Fatura adresi için ülke alanını kaldır
    if (isset($fields['billing']['billing_country'])) {
        unset($fields['billing']['billing_country']);
    }

    // Kargo adresi için ülke alanını kaldır
    if (isset($fields['shipping']['shipping_country'])) {
        unset($fields['shipping']['shipping_country']);
    }

    return $fields;
}

// 2. Adres düzenleme sayfasından ülke alanını kaldır
add_filter('woocommerce_billing_fields', 'remove_country_from_address_edit', 20, 2);
add_filter('woocommerce_shipping_fields', 'remove_country_from_address_edit', 20, 2);
function remove_country_from_address_edit($fields, $country) {
    // Ülke alanını kaldır
    if (isset($fields['billing_country'])) {
        unset($fields['billing_country']);
    }

    if (isset($fields['shipping_country'])) {
        unset($fields['shipping_country']);
    }

    return $fields;
}

// 3. Form gönderildiğinde varsayılan ülkeyi Türkiye olarak ayarla
add_action('woocommerce_checkout_process', 'set_default_country_on_submit');
function set_default_country_on_submit() {
    $_POST['billing_country'] = 'TR';
    if (isset($_POST['shipping_country'])) {
        $_POST['shipping_country'] = 'TR';
    }
}

// 4. Siparişlere varsayılan ülke bilgisini ekle
add_action('woocommerce_checkout_create_order', 'add_default_country_to_order');
function add_default_country_to_order($order) {
    $order->set_billing_country('TR');
    $order->set_shipping_country('TR');
}

// 5. Müşteri hesaplarına varsayılan ülke bilgisini ekle
add_filter('woocommerce_customer_get_billing_country', 'set_customer_default_country');
add_filter('woocommerce_customer_get_shipping_country', 'set_customer_default_country');
function set_customer_default_country($country) {
    return empty($country) ? 'TR' : $country;
}


/**
 * WooCommerce'e vergi numarası ve vergi dairesi alanları ekler
 */

// 1. Ödeme sayfasına vergi alanlarını ekle
add_filter('woocommerce_checkout_fields', 'add_tax_fields_to_checkout');
function add_tax_fields_to_checkout($fields) {
    // Fatura bölümüne vergi numarası alanı ekle
    $fields['billing']['billing_tax_number'] = array(
        'type'        => 'text',
        'label'       => 'Vergi Numarası',
        'placeholder' => 'Vergi numaranızı giriniz',
        'required'    => false, // İsterseniz true yapabilirsiniz
        'class'       => array('form-row-wide'),
        'priority'    => 120,
        'clear'       => true
    );

    // Fatura bölümüne vergi dairesi alanı ekle
    $fields['billing']['billing_tax_office'] = array(
        'type'        => 'text',
        'label'       => 'Vergi Dairesi',
        'placeholder' => 'Vergi dairenizi giriniz',
        'required'    => false, // İsterseniz true yapabilirsiniz
        'class'       => array('form-row-wide'),
        'priority'    => 121,
        'clear'       => true
    );

    return $fields;
}

// 2. Adresi düzenleme sayfasında da vergi alanlarını göster
add_filter('woocommerce_billing_fields', 'add_tax_fields_to_address_edit', 10, 2);
function add_tax_fields_to_address_edit($fields, $country) {
    // Eğer adres düzenleme sayfasında isek
    if (is_wc_endpoint_url('edit-address')) {
        // Vergi numarası alanı ekle
        $fields['billing_tax_number'] = array(
            'type'        => 'text',
            'label'       => 'Vergi Numarası',
            'placeholder' => 'Vergi numaranızı giriniz',
            'required'    => false,
            'class'       => array('form-row-wide'),
            'priority'    => 120,
            'clear'       => true
        );

        // Vergi dairesi alanı ekle
        $fields['billing_tax_office'] = array(
            'type'        => 'text',
            'label'       => 'Vergi Dairesi',
            'placeholder' => 'Vergi dairenizi giriniz',
            'required'    => false,
            'class'       => array('form-row-wide'),
            'priority'    => 121,
            'clear'       => true
        );
    }

    return $fields;
}

// 3. Vergi alanlarını kaydet
add_action('woocommerce_checkout_update_order_meta', 'save_tax_fields');
function save_tax_fields($order_id) {
    if (!empty($_POST['billing_tax_number'])) {
        update_post_meta($order_id, '_billing_tax_number', sanitize_text_field($_POST['billing_tax_number']));
    }

    if (!empty($_POST['billing_tax_office'])) {
        update_post_meta($order_id, '_billing_tax_office', sanitize_text_field($_POST['billing_tax_office']));
    }
}

// 4. Vergi alanlarını admin panelinde sipariş detayında göster
add_action('woocommerce_admin_order_data_after_billing_address', 'show_tax_fields_in_admin_order', 10, 1);
function show_tax_fields_in_admin_order($order) {
    $order_id = $order->get_id();

    $tax_number = get_post_meta($order_id, '_billing_tax_number', true);
    $tax_office = get_post_meta($order_id, '_billing_tax_office', true);

    if (!empty($tax_number)) {
        echo '<p><strong>Vergi Numarası:</strong> ' . esc_html($tax_number) . '</p>';
    }

    if (!empty($tax_office)) {
        echo '<p><strong>Vergi Dairesi:</strong> ' . esc_html($tax_office) . '</p>';
    }
}

// 5. Vergi alanlarını e-posta bildirimlerinde göster
add_filter('woocommerce_email_order_meta_fields', 'add_tax_fields_to_emails', 10, 3);
function add_tax_fields_to_emails($fields, $sent_to_admin, $order) {
    $order_id = $order->get_id();

    $tax_number = get_post_meta($order_id, '_billing_tax_number', true);
    $tax_office = get_post_meta($order_id, '_billing_tax_office', true);

    if (!empty($tax_number)) {
        $fields['billing_tax_number'] = array(
            'label' => 'Vergi Numarası',
            'value' => $tax_number
        );
    }

    if (!empty($tax_office)) {
        $fields['billing_tax_office'] = array(
            'label' => 'Vergi Dairesi',
            'value' => $tax_office
        );
    }

    return $fields;
}

// 6. Vergi alanlarını sipariş detay sayfasında müşteriye göster
add_action('woocommerce_order_details_after_customer_details', 'show_tax_fields_in_order_details', 10, 1);
function show_tax_fields_in_order_details($order) {
    $order_id = $order->get_id();

    $tax_number = get_post_meta($order_id, '_billing_tax_number', true);
    $tax_office = get_post_meta($order_id, '_billing_tax_office', true);

    if (!empty($tax_number) || !empty($tax_office)) {
        echo '<section class="woocommerce-tax-info">';
        echo '<h2>Vergi Bilgileri</h2>';
        echo '<table class="woocommerce-table shop_table tax_info">';

        if (!empty($tax_number)) {
            echo '<tr>';
            echo '<th>Vergi Numarası:</th>';
            echo '<td>' . esc_html($tax_number) . '</td>';
            echo '</tr>';
        }

        if (!empty($tax_office)) {
            echo '<tr>';
            echo '<th>Vergi Dairesi:</th>';
            echo '<td>' . esc_html($tax_office) . '</td>';
            echo '</tr>';
        }

        echo '</table>';
        echo '</section>';
    }
}

// 7. Kullanıcı hesabında kaydedilen alanları göster
add_filter('woocommerce_my_account_my_address_formatted_address', 'show_tax_fields_in_my_account', 10, 3);
function show_tax_fields_in_my_account($fields, $customer_id, $address_type) {
    // Sadece fatura adresi için vergi bilgilerini göster
    if ($address_type === 'billing') {
        $tax_number = get_user_meta($customer_id, 'billing_tax_number', true);
        $tax_office = get_user_meta($customer_id, 'billing_tax_office', true);
        if (!empty($tax_number)) {
            $fields['tax_number'] = 'Vergi Numarası: ' . $tax_number;
        }
        if (!empty($tax_office)) {
            $fields['tax_office'] = 'Vergi Dairesi: ' . $tax_office;
        }
    }
    return $fields;
}


/**
 * WooCommerce ödeme sayfası alan sıralamasını düzeltme
 */

add_filter('woocommerce_checkout_fields', 'reorder_checkout_fields');
function reorder_checkout_fields($fields) {
    // Fatura alanlarını düzenle
    if (isset($fields['billing']['billing_first_name'])) {
        $fields['billing']['billing_first_name']['priority'] = 10;
    }
    if (isset($fields['billing']['billing_last_name'])) {
        $fields['billing']['billing_last_name']['priority'] = 20;
    }
    if (isset($fields['billing']['billing_company'])) {
        $fields['billing']['billing_company']['priority'] = 30;
    }
    if (isset($fields['billing']['billing_tax_number'])) {
        $fields['billing']['billing_tax_number']['priority'] = 40;
    }
    if (isset($fields['billing']['billing_tax_office'])) {
        $fields['billing']['billing_tax_office']['priority'] = 50;
    }
    if (isset($fields['billing']['billing_state'])) {
        $fields['billing']['billing_state']['priority'] = 60;
    }
    if (isset($fields['billing']['billing_city'])) {
        $fields['billing']['billing_city']['priority'] = 70;
    }
    if (isset($fields['billing']['billing_address_1'])) {
        $fields['billing']['billing_address_1']['priority'] = 80;
    }
    if (isset($fields['billing']['billing_address_2'])) {
        $fields['billing']['billing_address_2']['priority'] = 90;
    }
    if (isset($fields['billing']['billing_postcode'])) {
        $fields['billing']['billing_postcode']['priority'] = 100;
    }
    if (isset($fields['billing']['billing_phone'])) {
        $fields['billing']['billing_phone']['priority'] = 110;
    }
    if (isset($fields['billing']['billing_email'])) {
        $fields['billing']['billing_email']['priority'] = 120;
    }
    return $fields;
}

// Adres düzenleme sayfası için sıralama
add_filter('woocommerce_billing_fields', 'reorder_address_edit_fields', 20, 2);
function reorder_address_edit_fields($fields, $country) {
    // Adres düzenleme sayfasında ise
    if (is_wc_endpoint_url('edit-address')) {
        // Burada anahtar yapısı farklı - önekler doğrudan kullanılıyor
        if (isset($fields['billing_first_name'])) {
            $fields['billing_first_name']['priority'] = 10;
        }
        if (isset($fields['billing_last_name'])) {
            $fields['billing_last_name']['priority'] = 20;
        }
        if (isset($fields['billing_company'])) {
            $fields['billing_company']['priority'] = 30;
        }
        if (isset($fields['billing_tax_number'])) {
            $fields['billing_tax_number']['priority'] = 40;
        }
        if (isset($fields['billing_tax_office'])) {
            $fields['billing_tax_office']['priority'] = 50;
        }
        if (isset($fields['billing_state'])) {
            $fields['billing_state']['priority'] = 60;
        }
        if (isset($fields['billing_city'])) {
            $fields['billing_city']['priority'] = 70;
        }
        if (isset($fields['billing_address_1'])) {
            $fields['billing_address_1']['priority'] = 80;
        }
        if (isset($fields['billing_address_2'])) {
            $fields['billing_address_2']['priority'] = 90;
        }
        if (isset($fields['billing_postcode'])) {
            $fields['billing_postcode']['priority'] = 100;
        }
        if (isset($fields['billing_phone'])) {
            $fields['billing_phone']['priority'] = 110;
        }
        if (isset($fields['billing_email'])) {
            $fields['billing_email']['priority'] = 120;
        }
    }

    return $fields;
}