import { defineStore } from 'pinia'
import { ref } from 'vue'
import { authApi } from '@/api/authApi'
import { getStoredTheme, setTheme as persistTheme } from '@/theme'

// 전역 UI 상태 (로그인/회원가입 레이어 팝업 등)
export const useUiStore = defineStore('ui', () => {
  const loginOpen = ref(false)
  const signupOpen = ref(false)
  const redirectPath = ref('')

  // 회원가입 허용 여부(관리자 설정). 비로그인도 조회 가능한 공개 API.
  const signupEnabled = ref(true)
  async function loadSignupEnabled() {
    try {
      const res = await authApi.signupEnabled()
      signupEnabled.value = !!res.enabled
    } catch {
      signupEnabled.value = true // 조회 실패 시 기본 허용(서버가 최종 검증)
    }
  }

  // 모바일 사이드바 드로어
  const sidebarOpen = ref(false)
  function toggleSidebar() {
    sidebarOpen.value = !sidebarOpen.value
  }
  function closeSidebar() {
    sidebarOpen.value = false
  }

  // 테마 (system | light | dark)
  const theme = ref(getStoredTheme())
  function setTheme(t) {
    theme.value = t
    persistTheme(t)
  }

  // 비밀번호 변경 모달
  const passwordOpen = ref(false)
  function openPassword() {
    passwordOpen.value = true
  }
  function closePassword() {
    passwordOpen.value = false
  }

  // 로그인 팝업 (회원가입 팝업은 닫고 전환)
  function openLogin(redirect = '') {
    redirectPath.value = redirect || ''
    signupOpen.value = false
    loginOpen.value = true
  }
  function closeLogin() {
    loginOpen.value = false
    redirectPath.value = ''
  }

  // 회원가입 팝업 (로그인 팝업은 닫고 전환). 열 때 최신 허용 여부 갱신.
  function openSignup() {
    loginOpen.value = false
    signupOpen.value = true
    loadSignupEnabled()
  }
  function closeSignup() {
    signupOpen.value = false
  }

  return {
    loginOpen, signupOpen, redirectPath, openLogin, closeLogin, openSignup, closeSignup,
    signupEnabled, loadSignupEnabled,
    sidebarOpen, toggleSidebar, closeSidebar,
    passwordOpen, openPassword, closePassword,
    theme, setTheme,
  }
})
