import { ethers } from "ethers";
import foundryABI from "../assets/contracts/foundry/abi.json";

export const purchase = async (issuanceId: string, label: string, credentials: string, isNative: boolean, signer: ethers.Signer) => {
    const contractAddress = "0x057a0659358FE72F5e1A819EB3bd8bd1139D0e38";
    const contract =  new ethers.Contract(contractAddress, foundryABI, signer);
    const to = await signer.getAddress();

    try {
        let tx = null;
        if(isNative){
            const price = await contract.appraise(issuanceId, label);
            tx = await contract.register(to, issuanceId, label, credentials, {value: price[0].toString()});

            return tx.toString();
        }else{
            tx = await contract.register(to, issuanceId, label, credentials);

            return tx;
        }
    } catch (error) {
        return error.reason;
    }
}

export const callFoundry = async (args: Array<String>, contractAddress: string, functionName: string, provider: ethers.Provider | ethers.Signer) => {
    const contract = new ethers.Contract(contractAddress, foundryABI, provider);

    try {
        const result = await contract[functionName](...args);
        return result;
    } catch (error) {
        return error.reason;
    }
}