import { ref } from 'vue'
import { defineStore } from 'pinia'
import type { KeycloakPosition } from '@/interface/keycloak-position'

export const usePositionKeycloakStore = defineStore(
  'positionKeycloak',
  () => {
    const menuData = ref<string[]>([
      'ลงเวลาปฏิบัติงาน',
      'ประวัติการลงเวลา',
      'รายการลงเวลากรณีพิเศษ',
    ])
    const dataPositionKeycloak = ref<KeycloakPosition | null>(null)
    const profileImg = ref<string>('')

    function setPositionKeycloak(data: KeycloakPosition) {
      dataPositionKeycloak.value = data
    }

    /**
     * ตั้งค่ารูปโปรไฟล์ผู้ใช้งาน
     * @param url URL ของรูปโปรไฟล์
     */
    function setProfileImg(url: string) {
      profileImg.value = url
    }

    /**
     * ล้างข้อมูล Keycloak position (ใช้เมื่อ logout)
     */
    function clearPositionKeycloak() {
      dataPositionKeycloak.value = null
      profileImg.value = ''
      // ลบ localStorage ด้วยเพื่อให้แน่ใจว่าข้อมูลหายจริง
      localStorage.removeItem('positionKeycloak')
    }

    /**
     * สร้างชื่อหน่วยงานจากข้อมูลลำดับชั้นองค์กร
     * @param obj ข้อมูลองค์กรที่มีโครงสร้าง child4 -> child3 -> child2 -> child1 -> root
     * @returns ชื่อหน่วยงานในรูปแบบ string เชื่อมด้วย /
     */
    function findOrgName(obj: KeycloakPosition | null): string {
      if (!obj?.organization) {
        return ''
      }

      const org = obj.organization
      const levels = ['child4', 'child3', 'child2', 'child1', 'root'] as const
      const parts: string[] = []

      for (const level of levels) {
        const value = org[level]
        if (value) {
          parts.push(value)
        }
      }

      return parts.length > 0 ? parts.join('/') : '-'
    }

    return {
      setPositionKeycloak,
      clearPositionKeycloak,
      setProfileImg,
      dataPositionKeycloak,
      profileImg,
      findOrgName,
      menuData,
    }
  },
  {
    persist: {
      key: 'positionKeycloak',
      storage: localStorage, // ใช้ localStorage เพื่อให้ข้อมูลอยู่ถาวร
    },
  }
)
