/**
 * Copyright (c) 2024 Huawei Technologies Co., Ltd.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE-MIT file in the root directory of this source tree.
 */

import { BackHandler, Text, TouchableOpacity, View } from 'react-native';
import { TestCase, TestSuite } from '@rnoh/testerino';
import { useCallback, useState } from 'react';
import { Button } from '../components';

export const BackHandlerTest = () => {
  const [counter, setCounter] = useState(0);

  const handleBackPress = useCallback(() => {
    setCounter(prev => prev + 1);
    return true;
  }, []);
  return (
    <TestSuite name="BackHandler">
      <TestCase
        itShould="be exported"
        fn={({ expect }) => {
          expect(BackHandler).to.be.not.undefined;
        }}
      />
      <TestCase itShould="exit app on press">
        <TouchableOpacity
          style={{ height: 64 }}
          onPress={() => {
            BackHandler.exitApp();
          }}>
          <Text style={{ width: '100%', height: '100%' }}>Exit</Text>
        </TouchableOpacity>
      </TestCase>
      <TestCase itShould="allow to add, remove eventListener and display number of system back presses/gestures accordingly">
        <Text style={{ width: '100%' }}>
          Back pressed {counter} time{counter === 1 ? '' : 's'}
        </Text>
        <View style={{ flexDirection: 'row' }}>
          <Button
            label={'Add event listener'}
            onPress={() => {
              BackHandler.addEventListener(
                'hardwareBackPress',
                handleBackPress,
              );
            }}
          />
          <Button
            label={'Remove event listener'}
            onPress={() => {
              BackHandler.removeEventListener(
                'hardwareBackPress',
                handleBackPress,
              );
            }}
          />
        </View>
      </TestCase>
    </TestSuite>
  );
};