import { ref } from 'vue'
import type { SideMenuItemType, UiPanelsType } from '~/typs/cmpnts'
import { DataLangsType, ShowInfoType, HtmlAttrsType, ModelType, ModelSelType, CVDataType } from '~/typs/cv'
import { VarsConfigType,ConfUrlsType } from '~/typs/config'
import { VarsUserType} from '~/typs/users'

const reqError = ref({ defs: '', lang: '', data: '', gql: '', api: '' })

const currentMapKey = ref('')
const isSidebarOpen = ref(false)
const toggleSidebar = () => {
  isSidebarOpen.value = !isSidebarOpen.value
}
const showModal = ref(false)

const isAsidePanelOpen = ref(false)

const sideSettingButton = ref(false)

const isSettingsPanelOpen = ref(false)

const isSearchPanelOpen = ref(false)
const usideSettingButton = ref(false)

const isNotificationsPanelOpen = ref(false)

const useSettings = ref(false)

const useSearch = ref(false)

const search = ref('')

const isDevelmode = ref(false)

const bcPath = ref('')

const navTitle = ref({
  text: '',
  textclick: null as null | Function,
  title: '',
  cmpnt: '',
  ops: [] as any[],
  btntype: '',
  cllbck: null as null | Function,
})
const dfltNavTitle = () => {
  navTitle.value = {
    text: '',
    textclick: null as null | Function,
    title: '',
    cmpnt: '',
    ops: [] as any[],
    btntype: '',
    cllbck: null as null | Function,
  }
}

const bookCllbck = ref()
const bookSelec = (data: string) => {
  if (data === '#') {
    bcPath.value = ''
    dfltNavTitle()
  }
  else {
    if (bookCllbck.value)
      bookCllbck.value(data)
    // else ...
  }
}
const sidebarMenuItems = ref([] as SideMenuItemType[])

const checkin = ref(false)
const connection = ref({
  state: '',
}) 

const side_menu_click = ref()
const app_home_click = ref()

const backdrop_blur = ref(14)
const back_opacity = ref(60)
const panels = ref({} as UiPanelsType)

const show_profile = ref(false)

const cvdata = ref({} as CVDataType | any)
const datalang = ref({} as DataLangsType | any)
const showinfo = ref({} as ShowInfoType)
const authinfo = ref({ editable: false, viewchange: false, show: true })

const dataSections = ref([] as string[])
const htmlAttrs = ref({
  bold: '', //'itm-title',
  list: 'list-circle ml-5',
  link: 'link',
	text: '',
} as HtmlAttrsType)

const cv_model = ref({} as ModelType)
const models = ref({} as ModelType)
const selectOps = ref({} as ModelSelType)
const current_model = ref({} as ModelType)
const current_modelid = ref("")

const APPNAME = ref('')
const APPHOME = ref('/')
const AUTHKEY = ref('auth')
const UUIDNONE = ref('none')
const TKNLIMIT = ref(20)
const REFRESHTIME = ref(5)
const ASSETS_PATH = ref("/assets")
const DATA_PATH = ref("/assets/data")
// const DATA_URL = ref("${DATA_PATH}/dist/info.json")
const MODEL_ID = ref("cv")
const URLKEY = ref("?k: ") // location.search.replace('?k: ','')
const AUTH_SEPCHAR = ref(";") 
const PASSWD_ENC = ref("enc;") 
const ALLOW_REGISTER = ref(false)
const RESET_PASSWORD = ref(false)

const CONFURLS = ref({} as ConfUrlsType)

const timeoutAuth = ref(0)
const allowView = ref(false)
const userID = ref('')

const sourceRoute = ref('')

const varsConfig = ref({} as VarsConfigType)
const varsUser = ref({} as VarsUserType)

export default function useState() {
  return {
		reqError,
    currentMapKey,
    isSidebarOpen,
    toggleSidebar,
    isAsidePanelOpen,
    isSettingsPanelOpen,
    isSearchPanelOpen,
    isNotificationsPanelOpen,
		useSettings,
    usideSettingButton,
    sideSettingButton,
    bcPath,
    bookSelec,
    bookCllbck,
    navTitle,
    dfltNavTitle,
    checkin,
    connection,
    sidebarMenuItems,
    showModal,
		side_menu_click,
		app_home_click,
		useSearch,
		search,
		back_opacity,
		backdrop_blur,
		panels,
		show_profile,
		cvdata,
		datalang,
		showinfo,
		authinfo,
		dataSections,
		htmlAttrs,
		selectOps,
		models,
		cv_model,
		current_model,
		current_modelid,
    timeoutAuth,
		isDevelmode,
		allowView,
		userID,
		sourceRoute,
		varsConfig,
		varsUser,

		// APP CONFIG VARS
		APPNAME,
		APPHOME,
		AUTHKEY,
		UUIDNONE,
		TKNLIMIT,
		REFRESHTIME,
		ASSETS_PATH,
		DATA_PATH,
		MODEL_ID,
		URLKEY,
		AUTH_SEPCHAR,
		PASSWD_ENC,
		ALLOW_REGISTER,
		RESET_PASSWORD,
		CONFURLS,
  }
}
