<?php
namespace GrCop;

// Exit if accessed directly
if (!defined('ABSPATH')) {
    exit;
}

class WC_Settings_GrCop extends \WC_Settings_Page
{
    public function __construct()
    {
        $this->id    = 'grcop_settings';
        $this->label = __('Odstop od pogodbe', 'gr-odstop-od-pogodbe');

        parent::__construct();
    }

    /**
     * Get settings array.
     *
     * @return array
     */
    public function get_settings()
    {
        $site_name = get_bloginfo('name');
        if (empty($site_name)) {
            $site_name = __('trgovine', 'gr-odstop-od-pogodbe');
        }

        // Get product categories
        $categories = get_terms(['taxonomy' => 'product_cat', 'hide_empty' => false]);
        $cat_options = [];
        if (!is_wp_error($categories) && !empty($categories)) {
            foreach ($categories as $category) {
                $cat_options[$category->slug] = $category->name;
            }
        }

        // Get order statuses
        $order_statuses = wc_get_order_statuses();
        $status_options = [];
        foreach ($order_statuses as $key => $label) {
            $status_options[str_replace('wc-', '', $key)] = $label;
        }

        $settings = [
            [
                'title' => __('Splošne nastavitve odstopa od pogodbe', 'gr-odstop-od-pogodbe'),
                'type'  => 'title',
                'desc'  => __('Tukaj konfigurirate osnovne parametre za gumb in obrazec za odstop od pogodbe (ZVPot-1 / EU Direktiva). Za neprijavljene kupce uporabite kratko kodo (shortcode): <strong><code>[gr_odstop_od_pogodbe_form]</code></strong> na poljubni podstrani.', 'gr-odstop-od-pogodbe'),
                'id'    => 'grcop_general_settings_title'
            ],
            [
                'title'    => __('Obdobje za odstop (v dneh)', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Število dni od zaključka naročila, ko je gumb za odstop kupcu še na voljo (zakonsko najmanj 14 dni).', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_withdrawal_window',
                'type'     => 'number',
                'default'  => '14',
                'desc_tip' => true,
                'custom_attributes' => ['min' => '1', 'step' => '1']
            ],
            [
                'title'    => __('Statusi naročil za odstop', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite statuse naročil, pri katerih je odstop od pogodbe mogoč.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_eligible_statuses',
                'type'     => 'multiselect',
                'default'  => ['completed', 'processing', 'on-hold'],
                'options'  => $status_options,
                'desc_tip' => true,
                'class'    => 'wc-enhanced-select'
            ],
            [
                'title'    => __('Prikaz davka pri cenah artiklov', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite, ali naj cene artiklov na obrazcu za odstop vključujejo DDV.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_tax_display',
                'type'     => 'select',
                'default'  => 'shop',
                'options'  => [
                    'shop' => __('Glede na nastavitve trgovine (DDV v košarici)', 'gr-odstop-od-pogodbe'),
                    'incl' => __('Vključi davek (Z DDV)', 'gr-odstop-od-pogodbe'),
                    'excl' => __('Brez davka (Brez DDV)', 'gr-odstop-od-pogodbe'),
                ],
                'desc_tip' => true
            ],
            [
                'title'    => __('Stran z obrazcem za odstop', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite stran, na kateri se nahaja kratka koda [gr_odstop_od_pogodbe_form]. Ta stran se uporabi za direktne povezave v e-poštnih obvestilih.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_form_page',
                'type'     => 'single_select_page',
                'default'  => '',
                'desc_tip' => true
            ],
            [
                'title'    => __('Avtomatski gumb v nogi (Footer)', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Samodejno vstavi povezavo do obrazca za odstop v nogo spletne strani.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_enable_footer_link',
                'type'     => 'checkbox',
                'default'  => 'yes'
            ],
            [
                'title'    => __('Besedilo gumba/povezave', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Besedilo, ki se izpiše na gumbu ali povezavi (zakonsko mora biti nedvoumno, npr. "Odstop od pogodbe").', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_button_text',
                'type'     => 'text',
                'default'  => __('Odstopi od pogodbe tukaj', 'gr-odstop-od-pogodbe'),
                'desc_tip' => true
            ],
            [
                'title'    => __('Barva ozadja gumba v e-pošti', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite barvo ozadja za gumb za odstop v e-poštnih obvestilih.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_btn_bg_color',
                'type'     => 'color',
                'default'  => '#2563eb',
                'desc_tip' => true
            ],
            [
                'title'    => __('Barva besedila gumba v e-pošti', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite barvo besedila za gumb za odstop v e-poštnih obvestilih.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_btn_text_color',
                'type'     => 'color',
                'default'  => '#ffffff',
                'desc_tip' => true
            ],
            [
                'title'    => __('Barva ozadja gumba na spletni strani', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite barvo ozadja za gumbe za odstop na spletni strani.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_btn_bg_color',
                'type'     => 'color',
                'default'  => '#2563eb',
                'desc_tip' => true
            ],
            [
                'title'    => __('Barva besedila gumba na spletni strani', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite barvo besedila za gumbe za odstop na spletni strani.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_btn_text_color',
                'type'     => 'color',
                'default'  => '#ffffff',
                'desc_tip' => true
            ],
            [
                'title'    => __('Zaobljenost robov gumbov (v px)', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Vnesite zaobljenost robov gumbov na spletni strani v slikovnih pikah.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_btn_border_radius',
                'type'     => 'number',
                'default'  => '6',
                'desc_tip' => true,
                'custom_attributes' => ['min' => '0', 'step' => '1']
            ],
            [
                'title'    => __('Barva ozadja obrazca', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite barvo ozadja za obrazec na spletni strani.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_form_bg_color',
                'type'     => 'color',
                'default'  => '#ffffff',
                'desc_tip' => true
            ],
            [
                'title'    => __('Zaobljenost robov obrazca (v px)', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Vnesite zaobljenost robov obrazca v slikovnih pikah.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_form_border_radius',
                'type'     => 'number',
                'default'  => '12',
                'desc_tip' => true,
                'custom_attributes' => ['min' => '0', 'step' => '1']
            ],
            [
                'title'    => __('Naslov za vračilo artiklov', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Navedite vaš naslov in navodila za vračilo paketov. Ti podatki se prikažejo na potrditvenem zaslonu in v potrditveni e-pošti.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_return_address',
                'type'     => 'textarea',
                'default'  => \GrCop\GrCop_Main::get_default_store_address(),
                'css'      => 'width: 100%; height: 80px;',
                'desc_tip' => true
            ],
            [
                'type' => 'sectionend',
                'id'   => 'grcop_general_settings_end'
            ],
            [
                'title' => __('Izjeme in omejitve (Izključitev pravice do odstopa)', 'gr-odstop-od-pogodbe'),
                'type'  => 'title',
                'desc'  => __('Nekateri artikli po zakonu niso predmet odstopa (npr. higienski izdelki, personalizirani artikli, pokvarljivo blago).', 'gr-odstop-od-pogodbe'),
                'id'    => 'grcop_exclusions_title'
            ],
            [
                'title'    => __('Izključene kategorije', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite kategorije izdelkov, za katere odstop od pogodbe ni dovoljen.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_excluded_categories',
                'type'     => 'multiselect',
                'default'  => [],
                'options'  => $cat_options,
                'desc_tip' => true,
                'class'    => 'wc-enhanced-select'
            ],
            [
                'title'    => __('Izključeni izdelki (ID-ji)', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Vnesite ID-je posameznih izdelkov, ločene z vejico (npr.: 102, 145), za katere odstop ni mogoč.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_excluded_products',
                'type'     => 'text',
                'default'  => '',
                'desc_tip' => true
            ],
            [
                'type' => 'sectionend',
                'id'   => 'grcop_exclusions_end'
            ],
            [
                'title' => __('Možnosti vračila kupnine', 'gr-odstop-od-pogodbe'),
                'type'  => 'title',
                'desc'  => __('Omogočite kupcu izbiro načina vračila kupnine na obrazcu.', 'gr-odstop-od-pogodbe'),
                'id'    => 'grcop_refunds_title'
            ],
            [
                'title'    => __('Dovoljene metode vračila', 'gr-odstop-od-pogodbe'),
                'desc'     => __('Izberite metode, ki so na voljo kupcu.', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_refund_methods',
                'type'     => 'multiselect',
                'default'  => ['original', 'iban'],
                'options'  => [
                    'original' => __('Originalna metoda plačila', 'gr-odstop-od-pogodbe'),
                    'iban'     => __('Vračilo na TRR (vnos IBAN)', 'gr-odstop-od-pogodbe'),
                    'coupon'   => __('Dobropis / Kupon trgovine', 'gr-odstop-od-pogodbe')
                ],
                'class'    => 'wc-enhanced-select'
            ],
            [
                'type' => 'sectionend',
                'id'   => 'grcop_refunds_end'
            ],
            [
                'title' => __('E-poštna obvestila', 'gr-odstop-od-pogodbe'),
                'type'  => 'title',
                'desc'  => __('Konfigurirajte avtomatska e-poštna obvestila o prejemu odstopa (potrdila). Uporabite lahko spodnje značke.', 'gr-odstop-od-pogodbe'),
                'id'    => 'grcop_emails_title'
            ],
            [
                'title'   => __('Pošlji potrditveno e-pošto kupcu', 'gr-odstop-od-pogodbe'),
                'desc'    => __('Pošlji e-poštno obvestilo kupcu ob oddaji zahtevka za odstop.', 'gr-odstop-od-pogodbe'),
                'id'      => 'grcop_enable_email_customer',
                'type'    => 'checkbox',
                'default' => 'yes'
            ],
            [
                'title'    => __('Zadeva e-pošte za kupca', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_customer_subject',
                'type'     => 'text',
                'default'  => __('Potrditev prejema izjave o odstopu od pogodbe za naročilo #{order_id}', 'gr-odstop-od-pogodbe'),
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'    => __('Vsebina e-pošte za kupca', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_customer_body',
                'type'     => 'textarea',
                'default'  => "Spoštovani {customer_name},\n\nPotrjujemo prejem vaše izjave o odstopu od pogodbe za naročilo #{order_id}, ki je bila oddana dne {date_time}.\n\nIzbrani izdelki za vračilo:\n{returned_items}\n\nPodrobnosti vračila kupnine:\n{refund_details}\n\nNaslov in navodila za vračilo blaga:\n{return_instructions}\n\nVaš zahtevek bomo obdelali v najkrajšem možnem času.\n\nLep pozdrav,\nEkipa " . $site_name,
                'css'      => 'width: 100%; height: 180px;',
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}, {returned_items}, {refund_details}, {return_instructions}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'   => __('Pošlji e-pošto ob odobritvi kupcu', 'gr-odstop-od-pogodbe'),
                'desc'    => __('Pošlji e-poštno obvestilo kupcu, ko je zahtevek odobren.', 'gr-odstop-od-pogodbe'),
                'id'      => 'grcop_enable_email_approved',
                'type'    => 'checkbox',
                'default' => 'yes'
            ],
            [
                'title'    => __('Zadeva e-pošte ob odobritvi', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_approved_subject',
                'type'     => 'text',
                'default'  => __('Zahtevek za odstop od pogodbe odobren - Naročilo #{order_id}', 'gr-odstop-od-pogodbe'),
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'    => __('Vsebina e-pošte ob odobritvi', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_approved_body',
                'type'     => 'textarea',
                'default'  => "Spoštovani {customer_name},\n\nObveščamo vas, da je bil vaš zahtevek za odstop od pogodbe za naročilo #{order_id} odobren.\n\n{comment_section}\n\nLep pozdrav,\nEkipa " . $site_name,
                'css'      => 'width: 100%; height: 150px;',
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}, {comment}, {comment_section}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'   => __('Pošlji e-pošto ob zavrnitvi kupcu', 'gr-odstop-od-pogodbe'),
                'desc'    => __('Pošlji e-poštno obvestilo kupcu, ko je zahtevek zavrnjen.', 'gr-odstop-od-pogodbe'),
                'id'      => 'grcop_enable_email_rejected',
                'type'    => 'checkbox',
                'default' => 'yes'
            ],
            [
                'title'    => __('Zadeva e-pošte ob zavrnitvi', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_rejected_subject',
                'type'     => 'text',
                'default'  => __('Zahtevek za odstop od pogodbe zavrnjen - Naročilo #{order_id}', 'gr-odstop-od-pogodbe'),
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'    => __('Vsebina e-pošte ob zavrnitvi', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_rejected_body',
                'type'     => 'textarea',
                'default'  => "Spoštovani {customer_name},\n\nObveščamo vas, da je bil vaš zahtevek za odstop od pogodbe za naročilo #{order_id} zavrnjen.\n\n{comment_section}\n\nLep pozdrav,\nEkipa " . $site_name,
                'css'      => 'width: 100%; height: 150px;',
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}, {comment}, {comment_section}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'   => __('Pošlji e-pošto ob povračilu kupcu', 'gr-odstop-od-pogodbe'),
                'desc'    => __('Pošlji e-poštno obvestilo kupcu, ko je kupnina povrnjena.', 'gr-odstop-od-pogodbe'),
                'id'      => 'grcop_enable_email_refunded',
                'type'    => 'checkbox',
                'default' => 'yes'
            ],
            [
                'title'    => __('Zadeva e-pošte ob povračilu', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_refunded_subject',
                'type'     => 'text',
                'default'  => __('Kupnina za odstop od pogodbe povrnjena - Naročilo #{order_id}', 'gr-odstop-od-pogodbe'),
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'    => __('Vsebina e-pošte ob povračilu', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_refunded_body',
                'type'     => 'textarea',
                'default'  => "Spoštovani {customer_name},\n\nObveščamo vas, da je bila kupnina za vaš odstop od pogodbe za naročilo #{order_id} povrnjena.\n\n{comment_section}\n\nLep pozdrav,\nEkipa " . $site_name,
                'css'      => 'width: 100%; height: 150px;',
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}, {comment}, {comment_section}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'    => __('Prejemnik e-pošte za trgovca', 'gr-odstop-od-pogodbe'),
                'desc'     => __('E-poštni naslov za prejemanje obvestil o novem odstopu od pogodbe (če je prazno, se pošlje na privzeti e-poštni naslov skrbnika spletnega mesta).', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_admin_recipient',
                'type'     => 'text',
                'default'  => '',
                'desc_tip' => true
            ],
            [
                'title'    => __('Zadeva e-pošte za trgovca', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_admin_subject',
                'type'     => 'text',
                'default'  => __('Nov odstop od pogodbe - Naročilo #{order_id}', 'gr-odstop-od-pogodbe'),
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}', 'gr-odstop-od-pogodbe')
            ],
            [
                'title'    => __('Vsebina e-pošte za trgovca', 'gr-odstop-od-pogodbe'),
                'id'       => 'grcop_email_admin_body',
                'type'     => 'textarea',
                'default'  => "Pozdravljeni,\n\nStranka {customer_name} je oddala zahtevek za odstop od pogodbe za naročilo #{order_id}.\n\nDatum zahtevka: {date_time}\nIzdelki za vračilo:\n{returned_items}\n\nPodrobnosti vračila:\n{refund_details}\n\nProsimo, preverite evidenco v administraciji in izvedite vračilo.",
                'css'      => 'width: 100%; height: 150px;',
                'desc_tip' => __('Značke: {order_id}, {customer_name}, {date_time}, {returned_items}, {refund_details}', 'gr-odstop-od-pogodbe')
            ],
            [
                'type' => 'sectionend',
                'id'   => 'grcop_emails_end'
            ],
            [
                'title' => __('Sledljivost in razhroščevanje', 'gr-odstop-od-pogodbe'),
                'type'  => 'title',
                'id'    => 'grcop_debug_title'
            ],
            [
                'title'   => __('Vklopi debug logiranje', 'gr-odstop-od-pogodbe'),
                'desc'    => __('Piši razhroščevalne informacije v sistemski log vtičnika.', 'gr-odstop-od-pogodbe'),
                'id'      => 'grcop_enable_debug_logging',
                'type'    => 'checkbox',
                'default' => 'no'
            ],
            [
                'title'   => __('Zadnji debug logi', 'gr-odstop-od-pogodbe'),
                'desc'    => __('Prikazanih je zadnjih 100 vrstic dnevnika razhroščevanja.', 'gr-odstop-od-pogodbe'),
                'id'      => 'grcop_log_viewer',
                'type'    => 'grcop_log_viewer'
            ],
            [
                'type' => 'sectionend',
                'id'   => 'grcop_debug_end'
            ]
        ];

        // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
        return apply_filters('woocommerce_get_settings_' . $this->id, $settings);
    }

    /**
     * Output the settings.
     */
    public function output()
    {
        $settings = $this->get_settings();
        \WC_Admin_Settings::output_fields($settings);
    }

    /**
     * Save settings.
     */
    public function save()
    {
        $settings = $this->get_settings();
        \WC_Admin_Settings::save_fields($settings);
    }

}
