// withHooks

import { EventTms_homeProperty } from 'esoftplay/cache/event/tms_home/import';
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
import { LibLoading } from 'esoftplay/cache/lib/loading/import';
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
import { LibObject } from 'esoftplay/cache/lib/object/import';
import { UserClass } from 'esoftplay/cache/user/class/import';
import React, { useEffect } from 'react';
import { View } from 'react-native';


export interface EventTms_out_hallArgs {

}
export interface EventTms_out_hallProps {

}
export default function m(props: EventTms_out_hallProps): any {
  const { scan_type, url_ticket_update, url_ticket_detail, price_type, gate_type, qr_code, event_id, email, selectGate, typeScanner, event_title, configPriority }: any = LibNavigation.getArgsAll<any>(props)

  let args = {
    selectGate: selectGate,
    fromPage: 'event/tms_home',
    event_id: event_id,
    event_title: event_title,
    typeScanner: typeScanner,
    gate_type: gate_type,
    price_type: price_type,
    url_ticket_detail: url_ticket_detail,
    url_ticket_update: url_ticket_update,
    configPriority: configPriority,
    scan_type: scan_type
  }

  useEffect(() => {
    loadData()
  }, [])

  function loadData() {
    EventTms_homeProperty.addCounterHallOutScan(1, "0")

    var post = {
      event_id: event_id,
      user_qr: email ? "" : qr_code,
      hall_id: selectGate?.id,
      email: email ? email : "",
    }

    let ticketsData: any[] = [];

    new LibCurl('event_tms_hall_out', post, (res) => {
      res?.list?.forEach((item: any, i: number) => {
        let foundIndex = ticketsData.findIndex((x: any) => x.price_id == item.price_id);

        let newItem = {
          ...item,
          checked: 0
        }

        if (foundIndex != -1) {
          ticketsData[foundIndex].list.push(newItem);
          ticketsData[foundIndex].qty += 1
        } else {
          ticketsData.push({
            price_id: item.price_id,
            price_name: item.price_name,
            qty: 1,
            list: [newItem]
          });
        }
      });

      if (res?.hasOwnProperty("staff") && res?.staff?.length > 0) {
        res?.staff?.map((it: any) => {
          let x = {
            ...it,
            price_id: "staff",
            user_name: it.name,
            user_image: it.image,
            exhibitor_name: it.department_name + "-" + it.exhibitor_name,
            checked: 0
          }
          ticketsData.push(x)
        })
      }

      if (ticketsData.length == 1) { // cek jika tiket cuma 1
        let tiket = ticketsData[0]
        if (tiket.price_id == "staff") { // jika itu adalah id card
          if (tiket.status_scanned == 2) {
            /* 0 tidak diperbolehkan, 1 sudah didalam, 2 available */
            LibNavigation.replace('event/tms_idcard', {
              selectedTicket: { ...tiket, key: qr_code },
              hall: "out",
              ...args
            })
          } else {
            let err = {
              message: tiket.status_label,
              result: tiket.scanned_detail
            }
            LibNavigation.replace('event/tms_out_hall_failed', { msgError: err, ...args, postGetData: post })
          }
        } else { // jika itu adalah tiket
          if (tiket.list?.length > 1) { // jika tiket itu mempunyai banyak qty
            LibNavigation.replace('event/tms_out_hall_list', { data: ticketsData, ...args })
          } else { // jika tiket itu cuma 1 qty
            let defaultUse = LibObject.set(tiket?.list, tiket?.list?.[0]?.status_scanned != 2 ? 1 : 0)(0, 'checked')
            let a = defaultUse?.filter((item: any) => item.checked == 1 && item.status_scanned != 2).map((it: any) => it.id)
            let postOut = {
              event_id: event_id,
              ids: JSON.stringify(a),
              hall_id: selectGate?.id,
              trx_id: new Date().getTime() + "" + UserClass.state().get()?.id,
              price_id: defaultUse?.filter((item: any) => item.checked == 1 && item.status_scanned != 2).map((it: any) => it.price_id)
            }
            if (a.length > 0) { // jika tiket itu bisa di pakai
              let urlOut = "event_tms_hall_out_confirm"
              LibNavigation.replace('event/tms_out_hall_success', { data: [tiket], ...args, url: urlOut, post: postOut })
            } else { // jika tiket itu tidak bisa dipakai
              let err = {
                message: tiket?.list?.[0]?.status_label,
              }
              LibNavigation.replace('event/tms_out_hall_failed', { msgError: err, ...args, postGetData: post })
            }
          }
        }
      } else { // jika punya tiket banyak
        LibNavigation.replace('event/tms_out_hall_list', { data: ticketsData, ...args })
      }


    }, (error) => {
      LibNavigation.replace('event/tms_out_hall_failed', { msgError: error, ...args, postGetData: post })
    }, 1)
  }
  return (
    <View style={{ flex: 1, backgroundColor: '#fff', alignContent: 'center', alignItems: 'center', justifyContent: 'center' }}>
      <LibLoading />
    </View>
  )
}