use crate::error::Error;
use autonomi::ScratchpadAddress;
use blsttc::SecretKey;
use log::{debug, info};
use sha2::{Digest, Sha256};
pub fn derive_master_index_info(
private_key_hex: &str,
) -> Result<(ScratchpadAddress, SecretKey), Error> {
debug!("Deriving master index key and address...");
let hex_to_decode = private_key_hex
.strip_prefix("0x")
.unwrap_or(private_key_hex);
let input_key_bytes = hex::decode(hex_to_decode)
.map_err(|e| Error::Config(format!("Failed to decode private key hex: {}", e)))?;
let mut hasher = Sha256::new();
hasher.update(&input_key_bytes);
let hash_result = hasher.finalize();
let key_array: [u8; 32] = hash_result.into();
let derived_key = SecretKey::from_bytes(key_array)
.map_err(|e| Error::Internal(format!("Failed to create SecretKey from HASH: {:?}", e)))?;
let derived_public_key = derived_key.public_key();
let address = ScratchpadAddress::new(derived_public_key);
info!("Derived Master Index Address: {}", address);
Ok((address, derived_key))
}