//@ts-nocheck
import { observable, action, makeAutoObservable } from 'mobx';
import { useState } from 'react';
import { Api } from '../../services/api';
import { myLog } from '../../utils/log';
import { Alert } from 'react-native';
import selfieStore from '../selfie/SelfieStore';
class Store {
  @observable photos = [];
  @observable interval;
  @observable counter;
  @observable recording = false;
  @observable ready = false;
  @observable
  hintAction = `Vui lòng bấm bắt đầu và thực hiện\ncác hành động theo yêu cầu`;
  @observable videoFile = '';

  @observable isLoading = false;
  @observable isError = false;

  @observable lastFace = new Date().getTime();
  @observable isFace = false;
  @observable intervalFace;
  @observable cancel = false;

  @observable ekycSuccess = false;

  @observable images: string[] = [];
  @observable imageUploads: string[] = [];
  @observable listAction = [];

  constructor() {
    makeAutoObservable(this);
  }

  @action
  async uploadLiveness(body, onSuccess?, onFailure?) {
    this.isLoading = true;
    const response = await Api.getInstance().uploadLiveness(body);
    this.isLoading = false;
    myLog(response);
    if (response.kind === 'ok') {
      if (response.data.meta.errorCode === 200) {
        this.isError = false;
        myLog('data', response.data.data);
        if (response.data.data === true) {
          this.ekycSuccess = true;
          if (onSuccess) {
            onSuccess(response.data.data);
          }
        } else {
          if (onFailure) {
            onFailure(
              'Vui lòng bấm nút bắt đầu và thực hiện đúng các hành động.'
            );
          }
        }
      } else {
        if (onFailure) {
          onFailure(response.data.meta.errorMessage);
        }
      }
    } else {
      this.isLoading = false;
      this.isError = false;
      if (onFailure) {
        onFailure('Lỗi đã xảy ra. Vui lòng thực hiện lại');
      }
    }
  }

  @action
  async confirmLicense(loanId, onSuccess) {
    try {
      const response = await Api.getInstance().confirmRule(loanId);
      if (response.kind === 'ok') {
        if (response.data.meta.errorCode === 200) {
          if (onSuccess) onSuccess();
        } else {
          Alert.alert('Thông báo', response.data.meta.errorMessage, [
            {
              text: 'Xác nhận',
              onPress: () => {
                if (onSuccess) onSuccess();
              },
            },
          ]);
        }
      } else {
        Alert.alert('Thông báo', 'Có lỗi không mong muốn xảy ra');
      }
    } catch (error) {
      console.log();
    }
  }

  @action
  async getListAction(onSuccess: Function) {
    this.imageUploads = [];
    try {
      const response = await Api.getInstance().getActionLiveness();
      if (response.kind === 'ok') {
        if (response.data?.meta?.errorCode === 200) {
          this.listAction = response.data?.data?.listActs;
          this.hintAction = response.data?.data?.listActs[0];
          onSuccess();
        } else {
          Alert.alert('Thông báo', response.data?.meta?.errorMessage);
        }
      } else {
        Alert.alert('Thông báo', 'Có lỗi không mong muốn xảy ra');
      }
    } catch (error) {
      console.log(error);
    }
  }

  @action
  async getConfigLiveness(onSuccess: Function) {
    try {
      const response = await Api.getInstance().getConfigLiveness();
      if (response.kind === 'ok') {
        if (response.data?.meta?.errorCode === 200) {
          onSuccess(response.data.data);
        } else {
          Alert.alert('Thông báo', response.data?.meta?.errorMessage);
        }
      } else {
        Alert.alert('Thông báo', 'Có lỗi không mong muốn xảy ra');
      }
    } catch (error) {
      console.log(error);
    }
  }

  @action
  async getConfigOcr(onSuccess: Function, onError?: Function) {
    try {
      const response = await Api.getInstance().getConfigOcr();
      if (response.kind === 'ok') {
        if (response.data?.meta?.errorCode === 200) {
          onSuccess(response.data.data);
        } else {
          if (onError) onError();
        }
      } else {
        if (onError) onError();
      }
    } catch (error) {
      if (onError) onError();
    }
  }

  @action
  async verifyLiveness(
    loanbriefId: number,
    listImage: any,
    onSuccess?: Function,
    onError?: Function
  ) {
    this.isLoading = true;
    try {
      const body = {
        loanbriefId: loanbriefId,
        selfie: selfieStore.photoBase64,
        action_images: listImage,
        action: this.hintAction,
      };

      const response = await Api.getInstance().verifyLiveness(body);

      this.images = [];
      this.isLoading = false;
      if (response.kind === 'ok') {
        if (response.data?.meta?.errorCode === 200) {
          if (response.data?.data.result === true) {
            this.imageUploads = [
              ...this.imageUploads,
              ...response.data?.data?.action_index?.map(
                (i: number) => listImage[i]
              ),
            ];

            this.listAction = this.listAction.filter(
              (x) => x !== this.hintAction
            );
            this.hintAction = this.listAction[0];
            if (onSuccess) onSuccess();
          } else {
            Alert.alert(
              'Thông báo',
              response.data.meta?.errorMessage ||
                'Có lỗi xảy ra. Vui lòng thử lại sau!',
              [
                {
                  text: 'Thử lại',
                  onPress: () => {
                    if (onError) onError();
                  },
                },
              ]
            );
          }
        } else {
          Alert.alert(
            'Thông báo',
            response.data.meta?.errorMessage ||
              'Có lỗi xảy ra. Vui lòng thử lại sau!',
            [
              {
                text: 'Thử lại',
                onPress: () => {
                  if (onError) onError();
                },
              },
            ]
          );
        }
      } else {
        Alert.alert('Thông báo', 'Có lỗi xảy ra. Vui lòng thử lại sau!', [
          {
            text: 'Thử lại',
            onPress: () => {
              if (onError) onError();
            },
          },
        ]);
      }
    } catch (error) {
      this.isLoading = false;
      Alert.alert('Thông báo', 'Có lỗi xảy ra. Vui lòng thử lại sau!', [
        {
          text: 'Thử lại',
          onPress: () => {
            if (onError) onError();
          },
        },
      ]);
    }
  }

  @action
  async verifyLiveness2(
    loanbriefId: number,
    listImage: any,
    onSuccess?: Function,
    onError?: Function
  ) {
    this.isLoading = true;
    try {
      const body = {
        loanbriefId: loanbriefId,
        action_images: listImage,
        action: this.hintAction,
      };

      const response = await Api.getInstance().verifyLiveness2(body);

      this.images = [];
      this.isLoading = false;
      if (response.kind === 'ok') {
        if (response.data?.meta?.errorCode === 200) {
          if (response.data?.data.result === true) {
            this.imageUploads = [
              ...this.imageUploads,
              ...response.data?.data?.action_index?.map(
                (i: number) => listImage[i]
              ),
            ];

            this.listAction = this.listAction.filter(
              (x) => x !== this.hintAction
            );
            this.hintAction = this.listAction[0];
            if (onSuccess) onSuccess();
          } else {
            Alert.alert(
              'Thông báo',
              response.data.meta?.errorMessage ||
                'Có lỗi xảy ra. Vui lòng thử lại sau!',
              [
                {
                  text: 'Thử lại',
                  onPress: () => {
                    if (onError) onError();
                  },
                },
              ]
            );
          }
        } else {
          Alert.alert(
            'Thông báo',
            response.data.meta?.errorMessage ||
              'Có lỗi xảy ra. Vui lòng thử lại sau!',
            [
              {
                text: 'Thử lại',
                onPress: () => {
                  if (onError) onError();
                },
              },
            ]
          );
        }
      } else {
        Alert.alert('Thông báo', 'Có lỗi xảy ra. Vui lòng thử lại sau!', [
          {
            text: 'Thử lại',
            onPress: () => {
              if (onError) onError();
            },
          },
        ]);
      }
    } catch (error) {
      this.isLoading = false;
      Alert.alert('Thông báo', 'Có lỗi xảy ra. Vui lòng thử lại sau!', [
        {
          text: 'Thử lại',
          onPress: () => {
            if (onError) onError();
          },
        },
      ]);
    }
  }

  @action
  async saveLiveness(loanbriefId) {
    try {
      const response = await Api.getInstance().saveImages({
        loanbriefId: loanbriefId,
        images: this.imageUploads,
      });
      if (response.kind === 'ok') {
        if (response.data?.meta?.errorCode === '200') {
          this.imageUploads = [];
        }
      }
    } catch (error) {}
  }
}
const livenessStore = new Store();
export default livenessStore;
