<template>
  <div class="switcher-container">
    <button-component
      @click="updateMode"
      :class="{ active: viewMode == firstKey }"
      classes="btn d-inline-flex px-2 "
      buttonText=""
      :title="text1"
      v-tooltip="text1"
    >
      <slot v-if="hasDefaultSlot" name="firstIcon"></slot>

      <div v-else>
        <!-- <span class="tavasi tavasi-table-view"></span> -->
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.2 19.2">
          <g id="Layer_2" data-name="Layer 2">
            <g id="Layer_1-2" data-name="Layer 1">
              <path
                class="cls-1"
                d="M5.6,0H3.2A3.2,3.2,0,0,0,0,3.2V5.6A3.2,3.2,0,0,0,3.2,8.8H5.6A3.2,3.2,0,0,0,8.8,5.6V3.2A3.2,3.2,0,0,0,5.6,0ZM7.2,5.6A1.6,1.6,0,0,1,5.6,7.2H3.2A1.6,1.6,0,0,1,1.6,5.6V3.2A1.6,1.6,0,0,1,3.2,1.6H5.6A1.6,1.6,0,0,1,7.2,3.2Z"
              ></path>
              <path
                class="cls-1"
                d="M16,0H13.6a3.2,3.2,0,0,0-3.2,3.2V5.6a3.2,3.2,0,0,0,3.2,3.2H16a3.2,3.2,0,0,0,3.2-3.2V3.2A3.2,3.2,0,0,0,16,0Zm1.6,5.6A1.6,1.6,0,0,1,16,7.2H13.6A1.6,1.6,0,0,1,12,5.6V3.2a1.6,1.6,0,0,1,1.6-1.6H16a1.6,1.6,0,0,1,1.6,1.6Z"
              ></path>
              <path
                class="cls-1"
                d="M5.6,10.4H3.2A3.2,3.2,0,0,0,0,13.6V16a3.2,3.2,0,0,0,3.2,3.2H5.6A3.2,3.2,0,0,0,8.8,16V13.6A3.2,3.2,0,0,0,5.6,10.4ZM7.2,16a1.6,1.6,0,0,1-1.6,1.6H3.2A1.6,1.6,0,0,1,1.6,16V13.6A1.6,1.6,0,0,1,3.2,12H5.6a1.6,1.6,0,0,1,1.6,1.6Z"
              ></path>
              <path
                class="cls-1"
                d="M16,10.4H13.6a3.2,3.2,0,0,0-3.2,3.2V16a3.2,3.2,0,0,0,3.2,3.2H16A3.2,3.2,0,0,0,19.2,16V13.6A3.2,3.2,0,0,0,16,10.4ZM17.6,16A1.6,1.6,0,0,1,16,17.6H13.6A1.6,1.6,0,0,1,12,16V13.6A1.6,1.6,0,0,1,13.6,12H16a1.6,1.6,0,0,1,1.6,1.6Z"
              ></path>
            </g>
          </g>
        </svg>
      </div>
    </button-component>
    <button-component
      @click="updateMode"
      :class="{ active: viewMode == secondKey }"
      classes="btn d-inline-flex px-2 "
      buttonText=""
      :title="text2"
      v-tooltip="text2"
    >
      <slot v-if="hasDefaultSlot" name="secondIcon"></slot>

      <svg v-else class="icon icon-menu">
        <use xlink:href="#icon-menu"></use>
      </svg>
      <!-- <span class="tavasi tavasi-list-view"></span> -->
    </button-component>
  </div>
</template>

<script>
/**
 * @vue-prop {string} [texts2 = Statistics] - متنی که برای نمایش به عنوان "ChartList" استفاده می‌شود.
 * @vue-prop {string} [texts1 = Normal] - متنی که برای نمایش به عنوان "Chart" استفاده می‌شود.
 *
 * @vue-data {boolean} [textValue = true] - حالت انتخاب شده ی سوئیچ در حالت true فعال و در حالت false غیر فعال می باشد

 * @vue-data {String} [text1 = ""] - متن اول که در برچسب اول نمایش داده می‌شود.
 * @vue-data {String} [text2 = ""] - متن دوم که در برچسب دوم نمایش داده می‌شود.
 */
export default {
  // mixins: [formBuilderMixin],
  // props: ["texts1", "texts2"],
  props: {
    texts1: {
      type: String, // نوع را به عنوان String مشخص کنید
      default: "Normal", // مقدار پیش‌فرض
    },
    texts2: {
      type: String, // نوع را به عنوان String مشخص کنید
      default: "Statistics", // مقدار پیش‌فرض
    },
    value: {
      type: String, // نوع را مشخص کنید (اگر می‌دانید ممکن است null باشد، از null | undefined استفاده کنید)
      default: "", // مقدار پیش‌فرض
    },
    firstKey: {
      type: String, // نوع را به عنوان String مشخص کنید
      default: "table", // مقدار پیش‌فرض
    },
    secondKey: {
      type: String, // نوع را به عنوان String مشخص کنید
      default: "list", // مقدار پیش‌فرض
    },
  },
  data() {
    return {
      viewMode: null,
      text1: "Chart",
      text2: "ChartList",
    };
  },
  computed: {
    hasDefaultSlot() {
      return !!this.$slots.default;
    },
  },
  mounted() {
    this.viewMode = this.value ?? this.firstKey;
    this.updateText();
  },
  methods: {
    /**
     * متن‌های پراپ‌ها را به متغیرهای اختصاص می‌دهد.
     * اگر texts1 تعریف شده باشد، مقادیر text1 و text2 را به ترتیب با texts1 و texts2 جایگزین می‌کند.
     */
    updateText() {
      if (this.texts1 !== undefined) {
        this.text1 = this.texts1;
        this.text2 = this.texts2;
      }
    },
    /**
     * رویداد تغییر وضعیت چک‌باکس را مدیریت می‌کند.
     * مقدار جدید textValue را از طریق رویداد "change-mode" به والد کامپوننت ارسال می‌کند.
     */
    updateMode() {
      this.viewMode =
        this.viewMode == this.firstKey ? this.secondKey : this.firstKey;
      this.$emit("change-mode", this.viewMode);
    },
  },
};
</script>

<style scoped lang="scss">
.switcher-container {
  background-color: rgb(209, 213, 219);
  border: 1px solid #ced4da;
  border-radius: 0.5rem;
  // width: 6em;

  .btn {
    border-radius: 0.5rem;
    border: 0;
    // line-height: 1;
    padding: 0.7em 0.5em;
    transition: all 0.2s;

    svg,
    .tavasi {
      width: 2.1em;
      height: 1em;
      // margin-right: 2px;
      // font-size: 1.6rem;
      color: #fff;
      fill: #fff;
      transition: all 0.2s;
    }
    &.active {
      background-color: var(--primary-color);
      transition: all 0.2s;

      .tavasi {
        color: #fff;
        transition: all 0.2s;

        &::before {
          color: #fff;
          transition: all 0.2s;
        }
      }
    }
  }
}
</style>