// withHooks

import esp from 'esoftplay/esp';
import moment from 'esoftplay/moment';
import React, { useEffect, useRef } from 'react';
import { TextInput, View } from 'react-native';


export interface EventCountdown_baseArgs {
  
}
export interface EventCountdown_baseProps {
  expired: string,
  expiredText?: string,
  style?: any,
  containerStyle?: any,
  onlyDay?: boolean
  onExpired?: () => void
  hideTimeUnit?: boolean
}

const fixSingleNumber = (number: number) => number < 10 ? '0' + number : number

export default function m(props: EventCountdown_baseProps): any {
  const ref = useRef<TextInput>(null)
  let timmer = useRef<any>(undefined).current
  
  useEffect(() => {
    countDown()
    return () => {
      clearTimeout(timmer)
      timmer = undefined
    }
  }, [])

  function countDown(): any {
    let expired = false
    function loop() {
      const t = [esp.lang("market/countdown", "day"), esp.lang("market/countdown", "hour"), esp.lang("market/countdown", "minutes"), esp.lang("market/countdown", "second")]
      const diffr = moment(props.expired).duration(moment().toDate());
      const text = [
        parseInt(diffr.asDays().toString()),
        fixSingleNumber(parseInt(diffr.hours().toString())),
        fixSingleNumber(parseInt(diffr.minutes().toString())),
        fixSingleNumber(parseInt(diffr.seconds().toString()))
      ]

      if (text.every((x) => (Number(x) < 1 || isNaN(Number(x))))) {
        expired = true
        props.onExpired && props.onExpired()
        ref?.current?.setNativeProps({ text: props.expiredText || esp.lang("market/countdown", "expired") })
      } else if (text.length == 4 && text[0] != 0 && props.onlyDay) {
        ref?.current?.setNativeProps({ text: text[0] + esp.lang("market/countdown", "days") })
      } else if (text[0] == 0) {
        text.splice(0, 1)
        t.splice(0, 1)
        if (text[0].toString() == '00') {
          text.splice(0, 1)
          t.splice(0, 1)
          if (text[0].toString() == '00') {
            text.splice(0, 1)
            t.splice(0, 1)
          }
        }
        ref?.current?.setNativeProps({ text: text.filter((x, i) => !isNaN(Number(x))).map((d, id) => d + (props?.hideTimeUnit ? '' : ' ' + t[id])).join(" : ") })
      } else {
        ref?.current?.setNativeProps({ text: text.filter((x, i) => !isNaN(Number(x))).map((d, id) => d + (props?.hideTimeUnit ? '' : ' ' + t[id])).join(" : ") })
      }
      if (!expired) {
        timmer = setTimeout(() => {
          loop()
        }, 1000);
      }
    };
    loop()
  }

  return (
    <View style={props.containerStyle} >
      <TextInput ref={ref} editable={false} style={props.style} />
    </View>
  )
}