<template>
    <!-- Header Start -->
    <header class="header">
        <div class="logo-wrap">
            <i class="icon-arrow-left-bold-box icli" @click="$router.go(-1)"></i>
            <h1 class="title-color font-md">選擇收貨地址</h1>
        </div>
    </header>
    <!-- Header End -->
    <!-- Main Start -->
    <main class="main-wrap address2-page mb-xxl">
        <!-- Address Section Start -->
        <section class="pt-0">
            <button class="d-block btn-outline-grey" @click="showOffcanvas = true">+ 增加新地址</button>

            <div class="address-wrap">
                <!-- Address Star -->
                <div
                    class="address-box"
                    :class="{ active: ua.is_default }"
                    v-for="(ua, index) in userAddr"
                    :key="ua.address_id"
                    @click="handleSetDefault(ua.address_id)"
                >
                    <div class="conten-box">
                        <div class="heading">
                            <div class="heading-left">
                                <i class="icon-home icli"></i>
                                <h2 class="title-color font-md">{{ ua.address_name }}</h2>
                                <span class="badges-round font-white bg-theme-theme font-xs" v-if="ua.is_default"
                                    >預設</span
                                >
                            </div>
                            <div class="heading-right">
                                <i class="icon-trash" @click.stop="handleDelete(ua.address_id)"></i>
                            </div>
                        </div>
                        <h3 class="title-color font-sm">{{ ua.consignee }}</h3>
                        <h3 class="title-color font-sm">{{ ua.tel }}</h3>
                        <p class="content-color font-sm">{{ ua.zipcode + ua.city + "" + ua.district + "" + ua.address }}</p>
                    </div>
                    <!-- <img src="/src/assets/images/map/map.jpg" alt="map" /> -->
                </div>
                <!-- Address End -->
            </div>
        </section>
        <!-- Address Section End -->
    </main>
    <!-- Main End -->

    <!-- Footer Start -->
    <!-- <footer class="footer-wrap footer-button">
    <a href="payment.html" class="font-md">Proceed to Payment</a>
  </footer> -->
    <!-- Footer End -->

    <!-- Add New Address Off Canvas Start -->
    <van-popup v-model:show="showOffcanvas" round closeable position="bottom">
        <div class="offcanvas-header">
            <h5 class="title-color font-md fw-600">增加住址</h5>
        </div>
        <van-form @submit="onSubmit" ref="addrForm">
            <div class="offcanvas-body small">
                <van-cell-group inset>
                    <van-field
                        v-model="form.name"
                        name="name"
                        label="住址名稱"
                        placeholder="自己可以識別的名稱"
                        :rules="[{ required: true, message: '請填寫住址名稱' }]"
                    />
                    <van-field
                        v-model="form.consignee"
                        name="consignee"
                        label="聯絡人"
                        placeholder="聯絡人"
                        :rules="[{ required: true, message: '請填寫聯絡人姓名' }]"
                    />
                    <van-field
                        v-model="form.tel"
                        name="tel"
                        label="聯絡電話"
                        placeholder="聯絡電話"
                        :rules="[{ required: true, message: '請填寫聯絡電話' }]"
                    />
                    <van-field
                        v-model="fieldValue"
                        is-link
                        readonly
                        name="area"
                        label="地區"
                        placeholder="請選擇區域"
                        @click="showPicker = true"
                    />
                    <van-popup v-model:show="showPicker" position="bottom">
                        <van-picker
                            name="selectedValue"
                            v-model="selectedValue"
                            :columns="columns"
                            @confirm="onConfirm"
                            @cancel="showPicker = false"
                            confirm-button-text="確認"
                            cancel-button-text="取消"
                        />
                    </van-popup>
                    <van-field v-model="form.zipcode" name="zipcode" label="郵遞區號" placeholder="郵遞區號" />
                    <van-field
                        v-model="form.address"
                        name="address"
                        label="詳細地址"
                        placeholder="詳細地址"
                        :rules="[{ required: true, message: '請填寫詳細地址' }]"
                    />
                    <van-field name="is_default" label="是否為預設">
                        <template #input>
                            <van-switch v-model="form.is_default" />
                        </template>
                    </van-field>
                </van-cell-group>
            </div>
            <div style="margin: 16px">
                <van-button round block type="primary" native-type="submit"> 新增 </van-button>
            </div>
        </van-form>
    </van-popup>
    <!-- Add New Address Off Canvas End -->
</template>

<script setup>
import { ref, onMounted } from "vue";

import { useRouter, useRoute } from "vue-router";

import { useOrderStore } from "@/store/Order";

import { showToast } from "vant";
import "vant/es/toast/style";

import { getArea } from "@/services/shop";
import { getUserAddress, addUserAddress, delUserAddress, setUserAddressDefault } from "@/services/user";

const route = useRoute();
const router = useRouter();
const orderStore = useOrderStore();

const showPicker = ref(false);

const showOffcanvas = ref(false);

const fieldValue = ref("");

const userAddr = ref([]);

const columns = ref([]);

const addrForm = ref();

const form = ref({
    name: "住家",
    consignee: "",
    tel: "",
    city: "",
    district: "",
    zipcode: "",
    address: "",
    is_default: false,
});

const selectedValue = ref(["0"]);

onMounted(async () => {
    let addrRes = await getUserAddress();

    if (addrRes.code === 200) {
        userAddr.value = addrRes.data;
    }

    let areaRes = await getArea();
    if (areaRes.code === 200) {
        columns.value = areaRes.data;
    }
});

const onConfirm = ({ selectedOptions }) => {
    showPicker.value = false;

    let selectedArea = selectedOptions[0].text;

    if (selectedOptions[1]) {
        selectedArea += "-" + selectedOptions[1].text;
    }
    if (selectedOptions[2]) {
        selectedArea += "-" + selectedOptions[2].text;
    }

    fieldValue.value = selectedArea;

    form.value.city = selectedOptions[0].text;
    form.value.district = selectedOptions[1].text;
    form.value.zipcode = selectedOptions[1].zipcode;
};

const handleSubmit = () => {
    // addrForm.value.submit()
};

const handleClose = () => {
    addrForm.value.resetValidation();
};

const onSubmit = async () => {
    let res = await addUserAddress(form.value);

    showOffcanvas.value = false;
    if (res.code === 200) {
        userAddr.value = res.data;
        return showToast("新增成功");
    } else {
        return showToast("新增失敗");
    }
};

const handleDelete = async (id) => {
    let res = await delUserAddress(id);

    if (res.code === 200) {
        userAddr.value = userAddr.value.filter((item) => {
            if (item.address_id !== id) {
                return item;
            }
        });
        showToast("刪除成功");
    } else {
        showToast("刪除失敗");
    }
};

const handleSetDefault = async (id) => {
    let res = await setUserAddressDefault(id);

    if (res.code === 200) {
        // userAddr.value = res.data
        userAddr.value = userAddr.value.map((item) => {
            if (item.address_id === id) {
                item.is_default = true;
            } else {
                item.is_default = false;
            }
            return item;
        });
        //判斷是否從order頁面過來，是的話就寫入piana及跳回checkout page
        if (route.query.from === "order") {
            let addr = userAddr.value.find((item) => {
                if (item.address_id === id) {
                    return item;
                }
            });

            orderStore.shipping.extra_data = {
                city: addr.city,
                district: addr.district,
                zipcode: addr.zipcode,
                address: addr.address,
                consignee: addr.consignee,
                tel: addr.tel,
            };

            router.replace("/checkout");
        }
    }
};
</script>

<style lang="less" scoped>
.conten-box {
    width: 100%;
}

.heading {
    display: flex;
    justify-content: space-between;
    .heading-left {
        display: flex;
        h2 {
            margin: 0 10px;
        }
    }

    .heading-right {
    }
}
</style>
