// withHooks


import { EventHeader } from 'esoftplay/cache/event/header/import';
import { EventReview_addProperty } from 'esoftplay/cache/event/review_add/import';
import { EventReview_item } from 'esoftplay/cache/event/review_item/import';
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
import { LibList } from 'esoftplay/cache/lib/list/import';
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
import { LibStyle } from 'esoftplay/cache/lib/style/import';
import { LibToastProperty } from 'esoftplay/cache/lib/toast/import';
import esp from 'esoftplay/esp';
import useGlobalState, { useGlobalReturn } from 'esoftplay/global';
import React, { useEffect } from 'react';
import { View } from 'react-native';


export interface EventReviewArgs {

}
export interface EventReviewProps {

}

const reviewList = useGlobalState<any>(undefined, { persistKey: 'event_review', isUserData: true, inFile: true, loadOnInit: true })

export function reviewListState(): useGlobalReturn<any> {
  return reviewList
}

export function calculateProb(probs: any) {
  if (probs.length == 0) return null;

  let sum = 0;

  for (let i = 0; i < probs.length; ++i) {
    sum += probs[i].percentage;
  }

  let gradientProbs = [];
  let stackedProb = 0;
  for (let i = 0; i < probs.length; ++i) {
    const normal = probs[i].percentage / sum;
    stackedProb += normal;
    gradientProbs.push(stackedProb);
  }

  const random = Math.random();

  for (let i = 0; i < gradientProbs.length; ++i) {
    if (random < gradientProbs[i]) {
      return probs[i];
    }
  }

  return probs[0];
}

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

  const url = 'event_order_review'
  const [data, setData] = reviewList.useState()
  const dataOfflineReview = EventReview_addProperty.state().get()

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

  function loadData() {
    let post = {
      options_url_expansion: 1,
    }
    new LibCurl(url, post, (res, msg) => {
      let a = res?.list?.map((item: any) => {
        return {
          ...item,
          is_offline_review: 0
        }
      })
      setData(res)
    }, (msg) => {
      LibToastProperty.show(msg)
    })
  }


  return (
    <View style={{ flex: 1, backgroundColor: LibStyle.colorBgGrey }}>
      <EventHeader notif title={esp.lang("event/review", "header_title")} />

      <LibList
        data={data?.list}
        renderItem={(item: any) => {
          let type = calculateProb(item?.config?.review)
          let args = {
            url: "event_order_detail?id=" + item.id,
            url_form: item.url_form + (item.url_detail.includes("?") ? "&" : "?") + 'type=' + type?.type,
            booking_id: item.id,
            type: type?.type,
          }

          const r = dataOfflineReview?.filter?.((elem: any) => elem.booking_id == item.id);
          const newRev = r?.length > 0 ? r[0].review : item.review
          return (
            <EventReview_item
              {...item}
              review={newRev}
              onPress={() => {
                LibNavigation.navigate(newRev == null ? 'event/review_add' : 'event/order_detail', args)
              }}
            />
          )
        }}
      />
    </View>
  )
}
