<script setup>
import { computed, ref, watch } from "vue";
import SettingsTab from "@/layouts/SettingsTab.vue";
import PrimaryButton from "@/components/Buttons/PrimaryButton.vue";
import MdrToggle from "@/components/Mudur-Ui-Kit/MdrToggle.vue";
import MdrFormField from "@/components/Mudur-Ui-Kit/MdrFormField.vue";
import MdrSelect from "@/components/Mudur-Ui-Kit/MdrSelect.vue";
import ExemptionReasonSelect from "@/components/ExemptionReasonSelect.vue";
import { useSettingsStore } from "@/stores/SettingsStore";
import { storeToRefs } from "pinia";
import MdrRadio from "@/components/Mudur-Ui-Kit/MdrRadio.vue";

const settingsStore = useSettingsStore();
const { defaults } = storeToRefs(settingsStore);
const { enums } = window.ginvoice;

const handleUpdate = () => {
  defaults.value.is_need_shipment = defaults.value.is_internet_sale;
  settingsStore.updateDefaults();
};

const convert = (obj) => {
  return Object.entries(obj).map(([key, text]) => ({ value: key, text }));
};

const exemptionModel = computed({
  get: () => ({
    exemption_code: defaults.value.exemption_code,
    exemption_reason: defaults.value.exemption_reason,
  }),
  set: (val) => {
    defaults.value.exemption_code = val.exemption_code;
    defaults.value.exemption_reason = val.exemption_reason;
  },
});

const cargoCompanies = [
  { text: "D Fast Dağıtım Hizmetleri ve Lojistik A.Ş.", value: "2650701090" },
  { text: "TRENDYOL LOJİSTİK ANONİM ŞİRKETİ", value: "8590921777" },
  { text: "YURTİÇİ KARGO SERVİSİ A.Ş.", value: "9860008925" },
  { text: "Aras Kargo Yurtiçi Yurtdışı Taşımacılık A.Ş", value: "0720039666" },
  { text: "DHL LOJİSTİK HİZMETLERİ A.Ş.", value: "6230098998" },
  { text: "Posta ve Telgraf Teşkilatı Anonim Şirketi", value: "7320068060" },
  { text: "PORT KARGO VE LOJİSTİK A.Ş. (Sürat)", value: "7321640262" },
  { text: "Hızlı Kargo A.Ş.", value: "9876543210" },
  {
    text: "Kolay Gelsin Dağıtım Hizmetleri Anonim Şirketi",
    value: "2910804196",
  },
  { text: "HOROZ LOJİSTİK A.Ş.", value: "4630097122" },
  { text: "Diğer", value: "other" },
];

const selectedShipmentCompany = ref("");

watch(
  () => defaults.value.shipment.company_tax_number,
  (val) => {
    const exists = cargoCompanies.some((c) => c.value === val);

    selectedShipmentCompany.value = exists ? val : "other";
  },
  { immediate: true },
);

watch(
  () => selectedShipmentCompany.value,
  (value) => {
    if (value === "other") {
      defaults.value.shipment.company_title = "";
      defaults.value.shipment.company_tax_number = "";
    } else {
      const company = cargoCompanies.find((c) => c.value === value);

      if (company) {
        defaults.value.shipment.company_title = company.text;
        defaults.value.shipment.company_tax_number = company.value;
      }
    }
  },
);
</script>

<template>
  <SettingsTab>
    <template #title>
      <div>{{ $t("defaults") }}</div>
    </template>
    <template #description>
      Fatura Entegratör ile daha hızlı fatura oluşturmak için varsayılan
      ayarlarınızı kayıt edin.
    </template>
    <div class="flex flex-col">
      <div class="grid gap-3">
        <MdrToggle v-model="defaults.is_internet_sale">
          İnternet satışı mı ?
        </MdrToggle>
        <div
          v-if="defaults.is_internet_sale"
          class="grid gap-3 border rounded p-2"
        >
          <div class="grid grid-cols-2 gap-3">
            <MdrSelect
              v-model="defaults.internet_sale.payment_method"
              label="Ödeme Yöntemi"
              :options="[
                { value: '', text: 'Otomatik Tespit' },
                ...convert(enums.payment_methods),
              ]"
            />
            <MdrFormField
              v-model="defaults.internet_sale.payment_platform"
              label="Ödeme Aracı"
            />
          </div>
          <div class="flex gap-4">
            <MdrRadio
              v-model="defaults.internet_sale.digital_sales"
              label="Kargo Gönderimi Yapıyorum"
              :value="false"
            />
            <MdrRadio
              v-model="defaults.internet_sale.digital_sales"
              label="Dijital Ürün Satıyorum"
              :value="true"
            />
          </div>
          <div
            v-if="!defaults.internet_sale.digital_sales"
            class="grid gap-3"
            :class="
              selectedShipmentCompany !== 'other'
                ? 'grid-cols-1'
                : 'grid-cols-2'
            "
          >
            <MdrSelect
              v-model="selectedShipmentCompany"
              label="Kargo Şirketi"
              :options="cargoCompanies"
            />
            <div
              v-if="selectedShipmentCompany === 'other'"
              class="flex items-center gap-2 text-sm p-2 rounded-md bg-gray-50 text-gray-600 border self-end"
            >
              <InformationCircleIcon class="size-6" />
              <span>
                Kargo firması ya da kurye bilgilerini girmeniz yeterlidir. Tüm
                alanları doldurmak zorunlu değildir.
              </span>
            </div>
          </div>
          <template
            v-if="
              selectedShipmentCompany === 'other' &&
              !defaults.internet_sale.digital_sales
            "
          >
            <div class="grid grid-cols-4 gap-3 items-end">
              <MdrFormField
                v-model="defaults.shipment.company_title"
                label="Kargo Firma Adı"
              />
              <MdrFormField
                v-model="defaults.shipment.company_tax_number"
                label="Kargo Firma Vergi No"
              />
              <MdrFormField
                v-model="defaults.shipment.courier_name"
                label="Kurye Ad"
              />
              <MdrFormField
                v-model="defaults.shipment.courier_tax_number"
                label="Kurye Vergi No"
              />
            </div>
          </template>
          <div
            v-if="defaults.internet_sale.digital_sales"
            class="grid grid-cols-2 gap-3 items-end"
          >
            <MdrFormField
              v-model="defaults.shipment.company_title"
              label="Firma Adı"
            />
            <MdrFormField
              v-model="defaults.shipment.company_tax_number"
              label="Vergi No"
            />
          </div>
        </div>
      </div>

      <div class="flex flex-col mt-4 border p-2 rounded">
        <ExemptionReasonSelect
          v-model="exemptionModel"
          label="Vergi Muafiyet Sebebi"
        />
        <div class="text-xs text-gray-500 dark:text-gray-400 mt-1">
          Vergi oranı %0 olan siparişler için varsayılan olarak seçilecek
          muafiyet kodu giriniz.
        </div>
      </div>
      <div class="flex flex-col mt-4 border p-2 rounded">
        <MdrFormField
          v-model="defaults.description"
          label="Açıklama"
          dense
          type="text"
        />
        <div class="text-xs text-gray-500 dark:text-gray-400 mt-1">
          Fatura için varsayılan açıklama giriniz.
        </div>
      </div>
      <div class="flex flex-col mt-4 border p-2 rounded">
        <MdrToggle v-model="defaults.include_zero_value_lines">
          Sıfır değerli satırları faturaya dahil et
        </MdrToggle>
      </div>
      <div class="flex flex-col mt-4 border p-2 rounded">
        <div class="text-sm font-medium text-gray-900 dark:text-white mb-2">
          Varsayılan Fatura Oluşturma Değerleri
        </div>
        <div class="grid grid-cols-3 gap-3 items-start">
          <div class="flex flex-col">
            <MdrSelect
              v-model="defaults.invoice_date"
              :options="[
                { text: 'Güncel Tarih', value: 'current_date' },
                { text: 'Sipariş Tarihi', value: 'order_date' },
              ]"
              label="Fatura Tarihi"
            />
            <div class="text-xs text-gray-500 dark:text-gray-400 mt-1">
              Fatura oluşturma tarihini hangi alandan alacağınızı belirlemek
              için kullanılır.
            </div>
          </div>
          <div class="flex flex-col">
            <MdrFormField
              v-model="defaults.product_tax_rate"
              label="Ürün Vergi Oranı"
              type="number"
              min="0"
              placeholder="%"
              dense
            />
            <div class="text-xs text-gray-500 dark:text-gray-400 mt-1">
              Eğer boş bırakılırsa ürünün ayarlarındaki vergi oranı kullanılır.
            </div>
          </div>
          <div class="flex flex-col">
            <MdrFormField
              v-model="defaults.shipping_tax_rate"
              label="Gönderim Ücreti Vergi Oranı"
              type="number"
              min="0"
              placeholder="%"
              dense
            />
            <div class="text-xs text-gray-500 dark:text-gray-400 mt-1">
              Eğer boş bırakılırsa gönderim ücreti vergi oranı kullanılır.
            </div>
          </div>
        </div>
      </div>
    </div>
    <template #actions>
      <PrimaryButton class="max-w-fit mt-5" @click="handleUpdate">
        {{ $t("save") }}
      </PrimaryButton>
    </template>
  </SettingsTab>
</template>
