import { Vue, Options } from 'vue-class-component'
import { defineComponent, ref } from 'vue'

import { IMessage } from '@src/model'
import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore'
import { tools } from '../store/Modules/tools'
import { func_tools } from '../store/Modules/toolsext'

// You can declare a mixin as the same style as components.
export default defineComponent({
  name: 'MixinUsers',
  setup(props) {
    function getUserByUsername(username: string) {
      const userStore = useUserStore()
      return userStore.getNameSurnameByUsername(username)
    }

    function getImgByUsername(username: string) {
      const userStore = useUserStore()
      return `public/${userStore.getImgByUsername(username)}`
    }

    function isValidUsername(username: string) {
      return username && username !== 'nessuno' && username !== 'none'
    }

    function getMyUsername() {
      const userStore = useUserStore()
      return userStore.my.username
    }

    function getUsernameChatByMsg(msg: IMessage) {
      if (msg) {
        if (msg.dest) {
          if (msg.dest.username !== getMyUsername()) return msg.dest.username
          return msg.origin ? msg.origin.username : {}
        }
      } else {
        return ''
      }
      return ''
    }

    function getnumItemsCart(): any {
      // ++Todo: conv
      /* const arrcart = Products.cart
      if (!!arrcart) {
        if (!!arrcart.items) {
          // @ts-ignore
          const total = arrcart.items.reduce((sum, item) => sum + item.order.quantity, 0)
          return total
        }
      } */
      return 0
    }

    function getImgByMsg(msg: IMessage) {
      const userStore = useUserStore()
      // @ts-ignore
      return `public/${userStore.getImgByUsername(this.getUsernameChatByMsg(msg))}`
    }

    function getMyImg() {
      const userStore = useUserStore()
      const ris = userStore.getImgByUsername(userStore.my.username)
      return (ris !== '') ? `public/${ris}` : ''
    }

    function getMyImgforIcon() {
      const userStore = useUserStore()
      const ris = userStore.getImgByUsername(userStore.my.username)
      return (ris !== '') ? `img:public/${ris}` : 'fas fa-user'
    }

    function getIconCart() {
      const iconcart = 'fas fa-shopping-cart'

      return iconcart
    }

    function MenuCollapse() {
      const globalStore = useGlobalStore()
      return globalStore.menuCollapse
      // return true
    }

    function Username() {
      const userStore = useUserStore()
      return userStore.my.username
    }

    function myName() {
      const userStore = useUserStore()
      return userStore.my.name
    }

    function mySurname() {
      const userStore = useUserStore()
      return userStore.my.surname
    }

    function myCell() {
      const userStore = useUserStore()
      return userStore.my.profile.cell
    }

    function Verificato() {
      const userStore = useUserStore()
      return userStore.my.verified_email
    }

    function MadeGift() {
      const userStore = useUserStore()
      return userStore.my.made_gift
    }

    function Email() {
      const userStore = useUserStore()
      return userStore.my.email
    }

    function getNumMsg() {
      // ++Todo: conv
      /*
      return MessageStore.getlasts_messages().length
      */

      return 0
    }

    function getNumMsgUnread() {
      // return userStore.getlasts_messages().length
      // ++Todo: conv
      // return MessageStore.getnumMsgUnread()
      return 0
    }

    function getMsgText(msg: IMessage, inarray: boolean) {
      let add = ''
      if (msg.origin && msg.origin.username === getMyUsername()) add = 'Tu: '

      const ris = add + msg.message
      if (inarray) return [ris]
      return ris
    }

    return {
      getUsernameChatByMsg,
      getMyUsername,
    }
  },
})
