import React, { useState } from 'react';
import { ScrollView, View, Text } from 'react-native';
import { Button, TextInput } from 'react-native-paper';

import { addAccountFromHDPath } from '../utils/Accounts';
import { Account, PathState } from '../types';
import styles from '../styles/stylesheet';

const HDPath = ({
  pathCode,
  updateAccounts,
  updateIndex,
  hideDialog,
}: {
  pathCode: string;
  updateIndex: (index: number) => void;
  updateAccounts: (account: Account) => void;
  hideDialog: () => void;
}) => {
  const [isAccountCreating, setIsAccountCreating] = useState(false);
  const [path, setPath] = useState<PathState>({
    firstNumber: '',
    secondNumber: '',
    thirdNumber: '',
  });

  const handleChange = (key: keyof PathState, value: string) => {
    setPath({
      ...path,
      [key]: value.replace(/[^0-9]/g, ''),
    });
  };

  const createFromHDPathHandler = async () => {
    setIsAccountCreating(true);
    const hdPath =
      pathCode +
      `${path.firstNumber}'/${path.secondNumber}/${path.thirdNumber}`;
    try {
      const newAccount = await addAccountFromHDPath(hdPath);
      if (newAccount) {
        updateAccounts(newAccount);
        updateIndex(newAccount.counterId);
        hideDialog();
      }
    } catch (error) {
      console.error('Error creating account:', error);
    } finally {
      setIsAccountCreating(false);
    }
  };

  return (
    <ScrollView style={styles.HDcontainer}>
      <View style={styles.HDrowContainer}>
        <Text style={styles.HDtext}>{pathCode}</Text>
        <TextInput
          keyboardType="numeric"
          mode="outlined"
          onChangeText={text => handleChange('firstNumber', text)}
          value={path.firstNumber}
          style={styles.HDtextInput}
        />
        <Text style={styles.HDtext}>'/</Text>
        <TextInput
          keyboardType="numeric"
          mode="outlined"
          onChangeText={text => handleChange('secondNumber', text)}
          value={path.secondNumber}
          style={styles.HDtextInput}
        />
        <Text style={styles.HDtext}>/</Text>
        <TextInput
          keyboardType="numeric"
          mode="outlined"
          onChangeText={text => handleChange('thirdNumber', text)}
          value={path.thirdNumber}
          style={styles.HDtextInput}
        />
      </View>
      <View style={styles.HDbuttonContainer}>
        <Button
          mode="contained"
          onPress={createFromHDPathHandler}
          loading={isAccountCreating}>
          {isAccountCreating ? 'Adding' : 'Add Account'}
        </Button>
      </View>
    </ScrollView>
  );
};

export default HDPath;
