/* eslint-disable space-before-function-paren */
import React, { useState, useEffect } from 'react'
import SubmitButton from '../../../components/SubmitButton/SubmitButton'
import PhotoCapture from '../PhotoCapture/PhotoCapture'
import Fingerprint from '../Fingerprint/Fingerprint'
import IrisScan from '../IrisScan/IrisScan'
import BiometricSelect from '../BiometricSelect/BiometricSelect'
import BackButton from '../../../components/BackButton/BackButton'
import { userContext } from '../../../context/User'
import * as cocoSsd from '@tensorflow-models/coco-ssd'
import * as tf from '@tensorflow/tfjs'
import { ToastContainer, toast } from 'react-toastify'
import 'react-toastify/dist/ReactToastify.css'
import { useTranslation } from 'react-i18next'
const Biometric = () => {
const { t } = useTranslation()
const [page, setPage] = useState(4)
const { userData, oriUserData, setUserData } = userContext()
const [model, setModel] = useState()
async function loadModel() {
try {
const model = await cocoSsd.load()
setModel(model)
console.log('setloadedModel')
} catch (err) {
console.log(err)
console.log('failed load model')
}
}
useEffect(() => {
tf.ready().then(() => {
loadModel()
})
}, [])
let predictions = []
async function predictionFunction() {
predictions = await model.detect(document.getElementById('img'))
console.log(predictions)
if (predictions.length > 0) {
console.log(predictions)
console.log(predictions[0])
}
return predictions
}
const conditionalComponent = () => {
switch (page) {
case 0:
return
case 1:
return
case 2:
return
default:
return
}
}
const handleBack = () => {
if (!userData.photo) {
setUserData({ ...userData, photo: oriUserData.photo })
}
setPage(4) // DUMMY VALUE 4
}
const handleSubmit = () => {
predictionFunction()
if (predictions.length === 0) {
toast.warning(t('PLEASE_WAIT'), {
timeout: 1000
})
}
console.log('befoer start')
setTimeout(() => {
if (predictions.length > 0) {
if (!userData.photo) {
setUserData({ ...userData, photo: oriUserData.photo })
} else if (
predictions[0].class === 'person' &&
predictions[0].score > 0.7
) {
setPage(4)
} else {
toast.error(t('PLEASE_CAPTURE_CLEAR_PHOTOGRAPH'))
}
} else {
toast.error(t('PLEASE_CAPTURE_CLEAR_PHOTOGRAPH'))
}
}, 1000)
}
const conditionalButton = () => {
switch (page) {
case 0:
return (
<>
handleSubmit()} />
handleBack()} />
>
)
case 1:
return (
<>
setPage(4)} />
setPage(4)} />
>
)
case 2:
return (
<>
setPage(4)} />
setPage(4)} />
>
)
}
}
return (
<>
{conditionalComponent()}
{conditionalButton()}
>
)
}
export default Biometric