/**
 * 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 { TestCase, TestSuite } from '@rnoh/testerino';
import React from 'react';
import { StyleSheet, View, DevSettings } from 'react-native';
import { Button } from '../components';

export const DevSettingsTest = () => {
  return (
    <TestSuite name="DevSettings">
      <TestCase
        itShould="add custom DevMenu item and react to presses after opening DevMenu"
        initialState={false}
        arrange={({ setState }) => <AddMenuItemTest setState={setState} />}
        assert={({ state, expect }) => {
          expect(state).to.be.true;
        }}
      />
      <TestCase itShould="reload the app after pressing the button">
        <View style={styles.container}>
          <Button
            label="Reload application"
            onPress={() => DevSettings.reload('Test reload')}
          />
        </View>
      </TestCase>
    </TestSuite>
  );
};

const AddMenuItemTest = (props: {
  setState: React.Dispatch<React.SetStateAction<boolean>>;
}) => {
  const customMenuItemOnPress = () => {
    props.setState(true);
  };
  const addCustomMenuItem = () => {
    DevSettings.addMenuItem('Custom menu item', customMenuItemOnPress);
  };
  return (
    <View style={styles.container}>
      <Button label="Add custom menu item" onPress={addCustomMenuItem} />
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    height: 50,
    justifyContent: 'center',
  },
});