import {
  computed,
  defineComponent, onMounted, PropType, ref, toRef, watch,
} from 'vue'

import { IMyCard, IMyElem, IMyPage, IOperators, ISocial } from '@src/model'
import { useGlobalStore } from '@store/globalStore'

import { CImgTitle } from '../CImgTitle/index'
import { CImgPoster } from '@/components/CImgPoster'
import { CTitle } from '@/components/CTitle/index'
import { tools } from '@store/Modules/tools'
import { shared_consts } from '@/common/shared_vuejs'
import { LandingFooter } from '@/components/LandingFooter'
import { CMyActivities } from '@/components/CMyActivities'
import { COpenStreetMap } from '@src/components/COpenStreetMap'
import { CCardCarousel } from '@src/components/CCardCarousel'
import { CMyPage } from '@src/components/CMyPage'
import { CMyPageIntro } from '@src/components/CMyPageIntro'
import { CEventsCalendar } from '@src/components/CEventsCalendar'
import { CMyEditor } from '@src/components/CMyEditor'
import { CMyFieldRec } from '@src/components/CMyFieldRec'
import { CSelectColor } from '@src/components/CSelectColor'
import { CMainView } from '@src/components/CMainView'
import { CMyProfileTutorial } from '@src/components/CMyProfileTutorial'
import { CSendRISTo } from '@src/components/CSendRISTo'
import { CDashboard } from '@src/components/CDashboard'
import { CCheckAppRunning } from '@src/components/CCheckAppRunning'
import { CStatusReg } from '@src/components/CStatusReg'
import { CTitleBanner } from '@src/components/CTitleBanner'
import { CCheckIfIsLogged } from '@src/components/CCheckIfIsLogged'
import { CSelectFontSize } from '@src/components/CSelectFontSize'
import { CNotifAtTop } from '@src/components/CNotifAtTop'
import { CPresentazione } from '@src/components/CPresentazione'
import { CRegistration } from '@src/components/CRegistration'
import { CShareSocial } from '@src/components/CShareSocial'

import MixinMetaTags from '@/mixins/mixin-metatags'
import MixinBase from '@/mixins/mixin-base'
import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n'
import { useRouter } from 'vue-router'


export default defineComponent({
  name: 'CMyElem',
  components: {
    CImgTitle, CTitle, LandingFooter, CEventsCalendar,
    CCardCarousel, COpenStreetMap, CMyPage, CMyPageIntro, CMyEditor, CMyFieldRec,
    CSelectColor, CSelectFontSize, CImgPoster,
    CCheckIfIsLogged, CStatusReg, CDashboard, CMainView, CNotifAtTop,
    CPresentazione, CMyActivities,
    CMyProfileTutorial, CSendRISTo,
    CTitleBanner, CShareSocial, CCheckAppRunning, CRegistration,
  },
  emits: ['selElemClick'],
  props: {
    myelem: {
      type: Object as PropType<IMyElem>,
      required: true,
    },
    selElem: {
      type: Object as PropType<IMyElem>,
      required: false,
    },
    path: {
      type: String,
      required: false,
      default: '',
    },
    editOn: {
      type: Boolean,
      required: false,
      default: false,
    },
    addOn: {
      type: Boolean,
      required: false,
      default: false,
    },
  },
  setup(props, { emit }) {
    const globalStore = useGlobalStore()

    const { setmeta, getsrcbyimg } = MixinMetaTags()
    const { setValDb, getValDb } = MixinBase()

    const $router = useRouter()

    const $q = useQuasar()
    const { t } = useI18n()

    const animare = ref(0)
    const slide = ref(0)
    const slide2 = ref(0)
    const disableSave = ref(true)
    const enableEdit = ref(false)
    const enableAdd = ref(true)
    const visushare = ref(false)

    const social = ref(<ISocial>{})

    const neworder = ref(<number | undefined>0)

    const myel = toRef(props, 'myelem')
    const newtype = ref(<any>'')

    const isAppRunning = computed(() => globalStore.isAppRunning )

    watch(() => myel.value.order, (value, oldval) => {
      mounted()
    })

    function getArrDisciplines() {
      return globalStore.disciplines.filter((rec: any) => rec.showinhome)
    }

    function getheightgallery() {
      if (tools.isMobile())
        return '400px'
      else
        return '600px'
    }

    function saveElem(exit?: boolean) {
      // Save Elem record
      const myelem = props.myelem
      myelem.order = neworder.value
      globalStore.saveMyElem($q, t, myelem).then((ris) => {
        if (ris) {
          // OK
          disableSave.value = true
          if (exit)
            enableEdit.value = false
        }
      })
    }

    function addNewElem(order?: number) {

      const newrec: IMyElem = {
        _id: undefined,
        type: newtype.value,
        path: props.myelem.path,
        order: order ? order : 1000,
        active: true,
        container: ''
      }

      if (newrec.type === shared_consts.ELEMTYPE.CAROUSEL_IMGS) {
        newrec.container2 = '8'
        newrec.height = 600
      }

      globalStore.addNewElem($q, t, newrec)
    }

    function dupElem(order?: number) {

      const newrec = props.myelem

      newrec._id = undefined
      newrec.order = order ? order : newrec.order! + 10

      globalStore.addNewElem($q, t, newrec)
    }

    function delElem() {
      $q.dialog({
        message: 'Eliminare ' + props.myelem.container + ' ?',
        html: true,
        ok: {
          label: 'Elimina',
          push: true,
        },
        title: '',
        cancel: true,
        persistent: false,
      }).onOk(async () => {

        // Save Elem record
        await globalStore.delMyElem($q, t, props.myelem).then((ris) => {
          if (ris) {
            // OK
            disableSave.value = true
          }
        })
      })

    }

    function modifElem() {
      disableSave.value = false
    }

    function mounted() {
      neworder.value = props.myelem.order

      if (props.myelem)
        newtype.value = props.myelem.type
    }

    function clickOnElem() {
      if (props.editOn) {
        enableEdit.value = true
        console.log('selElemClick', props.myelem)
        emit('selElemClick', props.myelem)
      }
    }

    function getClass() {
      let mycl = ''
      if (props.myelem.align === shared_consts.ALIGNTYPE.CEHTER) {
        mycl += ' align_center'
      } else if (props.myelem.align === shared_consts.ALIGNTYPE.RIGHT) {
        mycl += ' align_right'
      } else if (props.myelem.align === shared_consts.ALIGNTYPE.LEFT) {
        mycl += ' align_left'
      }

      if (props.myelem.class2)
        mycl += ' ' + props.myelem.class2

      if (props.selElem && props.editOn) {
        if (props.myelem._id === props.selElem._id)
          mycl += ' selectedElem'
      }

      return mycl
    }

    function showFit() {
      if (props.myelem.type)
        return [shared_consts.ELEMTYPE.TEXT].includes(props.myelem.type)
      else
        return false
    }

    function PagLogin() {
      $router.replace('/signin')
    }

    async function clickshare() {
      let mytext = await tools.sendMsgTelegramCmd(
        $q,
        t,
        shared_consts.MsgTeleg.SHARE_MSGREG,
        true
      )

      if (false) {
        social.value.description = mytext
        visushare.value = true
      }

    }

    onMounted(mounted)

    return {
      tools,
      shared_consts,
      getArrDisciplines,
      getheightgallery,
      slide,
      slide2,
      animare,
      setmeta,
      getsrcbyimg,
      saveElem,
      myel,
      disableSave,
      modifElem,
      delElem,
      addNewElem,
      newtype,
      neworder,
      enableEdit,
      enableAdd,
      clickOnElem,
      getClass,
      showFit,
      getValDb,
      dupElem,
      globalStore,
      PagLogin,
      visushare,
      social,
      clickshare,
      isAppRunning,
    }
  },

})
