<template>
  <form  @submit.prevent="save()">
    <div class="form-group form-row">
      <label class="col-2" for="title">عنوان: </label>
      <input
        class="form-control col"
        placeholder="عنوان را وارد کنید"
        type="text"
        id="title"
        name="title"
        v-model.trim="selectedItemClone.title"
      />
    </div>

    <div class="form-group form-row">
      <div class="col-12 d-flex justify-content-between">
        <div class="d-flex">
          <button-component
            type="submit"
            classes="btn-outline-primary"
            :buttonText="buttonText"
            :buttonLoading="buttonLoading"
          ></button-component>
          <button-component
            classes="btn-default"
            @click="closeModal()"
            buttonText="انصراف"
            :buttonLoading="buttonLoading"
          ></button-component>
        </div>
        <button-component
          v-if="selectedItem.id"
          classes="delete-btn btn-outline-danger"
          @click="deleteItem()"
          buttonText="حذف"
          :buttonLoading="buttonLoading"
        >
          <i class="tavasi tavasi-bin"></i>
        </button-component>
      </div>
    </div>
  </form>
</template>

<script>
import apis from "~/apis/listApi";
import { mapState } from "pinia";

export default {
  props: {
    selectedItem: {
      default() {
        return {};
      },
    },
    parentId: {
      default: 0,
    },

    apiName: {
      type: String,
      default: '',
    },
  },

  emits: ["update-list", "close-modal", "delete-item"],

  data() {
    return {
      buttonLoading: false,
      selectedItemClone: {
        id: undefined,
        title: "",
        listtype: 0,
        projectid: this.selectedProjectGetter?.id,
        parent: this.parentId,
      },
    };
  },
  computed: {
    ...mapState("list", [
      "selectedProjectGetter",
      "listIdGetter",
      "selectedItemGetter",
    ]),
    buttonText() {
      return this.selectedItemClone.id || this.selectedItemClone.guid
        ? "ذخیره"
        : "ثبت";
    },
  },

  methods: {
    save() {
      if (this.buttonLoading) return;
      this.buttonLoading = true;

      // apiName = subject | list
      const url = this.selectedItemClone.id
        ? apis[this.apiName].edit
        : apis[this.apiName].add;

      this.selectedItemClone.listid = this.listIdGetter;

      ApiService.formData(url, this.selectedItemClone)
        .then((res) => {
          this.mySwalToast({
            title: "تبریک",
            html: res.data.message,
            icon: "success",
          });

          this.$emit("update-list");
        })
        
        .finally(() => {
          this.buttonLoading = false;
        });
    },
    deleteItem() {
      if (this.buttonLoading) return;
      this.buttonLoading = true;

      const data = { id: this.listIdGetter, projectid: this.selectedProjectGetter?.id };

      this.mySwalConfirm({
        title: "هشدار!!!",
        html: "از حذف این مورد مطمئن هستید؟",
      }).then((result) => {
        if (result.isConfirmed) {
          ApiService.formData(apis.item.delete, data)
            .then((response) => {
              this.mySwalToast({
                title: "تبریک",
                html: response.data.message,
                icon: "success",
              });

              this.$emit("delete-item");
            })
            
            .finally(() => {
              this.buttonLoading = false;
            });
        }
      });
    },

    closeModal() {
      this.resetForm();
      this.$emit("close-modal");
    },
    resetForm() {
      this.selectedItemClone = {
        id: undefined,
        title: "",
        listtype: 0,
        projectid: this.selectedProjectGetter?.id,
        parent: this.parentId,
      };
    },
  },
  mounted() {
    if (this.selectedItem?.id)
      this.selectedItemClone = structuredClone(this.selectedItem);
    else this.resetForm();
  },
};
</script>
