// withHooks
import { LibLoading } from 'esoftplay/cache/lib/loading/import';
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
import { LibStyle } from 'esoftplay/cache/lib/style/import';

import { EventFirebase_socket } from 'esoftplay/cache/event/firebase_socket/import';
import { EventTms_homeProperty } from 'esoftplay/cache/event/tms_home/import';
import { LibDialog } from 'esoftplay/cache/lib/dialog/import';
import esp from 'esoftplay/esp';
import React, { useEffect } from 'react';
import { View } from 'react-native';


export interface EventTms_inArgs {

}
export interface EventTms_inProps {

}


export default function m(props: EventTms_inProps): any {

  const { price_type,
    gate_type,
    qr_code,
    event_id,
    selectGate,
    typeScanner,
    event_title,
    url_ticket_detail,
    url_ticket_update,
    configPriority,
    scan_type
  } = LibNavigation.getArgsAll<any>(props)

  const { get } = EventFirebase_socket()

  let whatTypeGate = gate_type == "1" ? 'in' : 'out'

  /* price_id */
  /* qty */
  /* name */
  /* qty_used */
  /* image */
  // sample: [
  //   "1121": [
  //     2,
  //     "Muhammad Bagus Yulianto",
  //     2,
  //     "https://api.test.bbo.co.id/images/modules/user/avatar/122674696.jpg"
  //   ],
  //   "staff": [
  //     [
  //       1,
  //       "Muhammad Bagus Yulianto",
  //       0,
  //       "https://api.test.bbo.co.id/images/modules/bigbang/exhibitor/1/staff/1211616174.jpg",
  //       "VIP-Expo Indonesia Jaya"
  //     ]
  //   ]
  // ]


  function mainPath(qr: string) {
    let a = ['event', event_id, whatTypeGate, qr]
    return a.join('/')
  }

  let args = {
    price_type: price_type,
    gate_type: gate_type,
    qr_code: qr_code,
    event_id: event_id,
    event_title: event_title,
    selectGate: selectGate,
    typeScanner: typeScanner,
    url_ticket_detail: url_ticket_detail,
    url_ticket_update: url_ticket_update,
    configPriority: configPriority,
    scan_type: scan_type
  }

  useEffect(() => {
    if (qr_code) {
      loadData()
    } else {
      LibDialog.warningConfirm("Oops", "QR Code tidak ditemukan", "Kembali", () => {
        LibNavigation.back()
      }, "", () => { })
    }
  }, [])

  function direction(tikets: any, tiket: any) {
    if (tiket.qty > 1) {
      LibNavigation.replace('event/tms_in_list', {
        tickets: tikets,
        ...args
      })
    } else {
      LibNavigation.replace('event/tms_in_success', {
        selectedTicket: tiket,
        ...args
      })
    }
  }

  function loadData() {
    let tikets: any[] = []
    EventTms_homeProperty.addCounterEntranceScan(1, "0")
    get(mainPath(encodeURIComponent(encodeURIComponent(qr_code))), selectGate?.id, (res) => {
      esp.log({ res });
      if (!res) {
        LibNavigation.replace('event/tms_in_failed', {
          text: esp.lang("event/tms_in", "ticket_empty_today"),
          ...args
        })
        return
      } else {
        Object.keys(res).forEach((key) => {
          if (key == 'staff') {
            Object.values(res[key]).map((item: any) => {
              let x = {
                price_id: key,
                title: decodeURIComponent(item[4])?.split("+").join(' '),
                color: LibStyle.colorPrimary,
                key: item[5],
                user_name: item[1],
                user_image: item[3],
                exhibitor_name: decodeURIComponent(item[4])?.split("+").join(' '),
                qty: item[0],
                qty_used: item[2],
                qty_left: Number(item[0]) - (Number(item[2]) || 0),
                text: item[6] || "",
              }
              tikets.push(x)
            })
          } else {
            let a = {
              price_id: key,
              title: price_type?.filter?.((item: any) => item.id == key)[0]?.name,
              color: price_type?.filter?.((item: any) => item.id == key)[0]?.color,
              key: qr_code,
              user_name: Object.values(res[key])?.[1],
              user_image: Object.values(res[key])?.[3],
              qty: Object.values(res[key])?.[0],
              qty_used: Object.values(res[key])?.[2],
              qty_left: Number(Object.values(res[key])?.[0]) - (Number(Object.values(res[key])?.[2]) || 0),
              text: (Object.values(res[key])?.[4] == 'k' ? Object.values(res[key]) : Object.values(res[key])?.[4]) || ""
            }
            tikets.push(a)
          }
        })

        if (tikets.length > 0) {
          if (tikets.length == 1) {
            const tiket = tikets[0];

            if (tiket?.text == "") { // jika index ke 5 di result get nya TIDAK ADA text nya
              if (tiket.qty_left <= 0) { // jika qty left nya 0 maka tiketnya habis
                LibNavigation.replace('event/tms_in_failed', {
                  text: esp.lang("event/tms_in", "ticket_empty"),
                  ticketItem: tiket,
                  ...args
                })
              } else { // jika masih punya tiket
                if (tiket.hasOwnProperty("exhibitor_name")) { // jika dia punya id card
                  LibNavigation.replace('event/tms_idcard', {
                    selectedTicket: tiket,
                    ...args
                  })
                } else { // ini data tiket user yang available
                  if (configPriority) { // ini untuk memunculkan priority
                    if (configPriority?.filter?.((item: any) => item.id == tiket.price_id).length > 0) {
                      direction(tikets, tiket)
                    } else { // ini jika di tms tidak memiliki hak scan tipe tiket tertentu
                      LibNavigation.replace('event/tms_in_warning', {
                        selectedTicket: tiket,
                        ...args
                      })
                    }
                  } else {
                    direction(tikets, tiket)
                  }
                }
              }
            } else {// jika index ke 5 di result get nya ADA text nya
              LibNavigation.replace('event/tms_in_failed', {
                text: tiket?.text,
                ticketItem: tiket,
                ...args
              })
            }
          } else { // ini jika tiketnya ada banyak
            LibNavigation.replace('event/tms_in_list', {
              tickets: tikets,
              ...args
            })
          }
        } else { // ini jika tiketnya tidak ada
          LibNavigation.replace('event/tms_in_failed', {
            text: esp.lang("event/tms_in", "ticket_not_found"),
            ...args
          })
        }
      }
    })
  }

  return (
    <View style={{ flex: 1, backgroundColor: '#fff' }}>
      <LibLoading />
    </View>
  )
}