import { ethers } from 'ethers';

export interface DelegationData {
    from_address: string;
    to_address: string;
    delegated_at: number;
    delegator_slips_percent: number;
}

export function generateDelegationMessage(data: DelegationData): string {
    return `from_address=${data.from_address.toLowerCase()}&to_address=${data.to_address.toLowerCase()}&delegated_at=${data.delegated_at}&delegator_slips_percent=${data.delegator_slips_percent}`;
}

export async function signDelegation(wallet: ethers.Wallet, toAddress: string, delegatedAt: number, delegatorSlipsPercent: number = 100): Promise<{ message: string; signature: string }> {
    const fromAddress = await wallet.getAddress();

    const data: DelegationData = {
        from_address: fromAddress.toLowerCase(),
        to_address: toAddress.toLowerCase(),
        delegated_at: delegatedAt,
        delegator_slips_percent: delegatorSlipsPercent
    };

    const message = generateDelegationMessage(data);
    const signature = await wallet.signMessage(message);

    return {
        message,
        signature
    };
}