import type { QueryParams } from "@dfinity/utils";
import type { Principal } from "@icp-sdk/core/principal";
import type { SnsGovernanceDid } from "../../declarations";
import type { IcrcAccount, IcrcLedgerDid } from "../../ledger/icrc";
import type { SnsNeuronPermissionType, SnsProposalDecisionStatus, SnsProposalRewardStatus, SnsVote } from "../enums/governance.enums";
import type { E8s } from "./common";
/**
 * The parameters available to list Sns neurons
 */
export interface SnsListNeuronsParams extends QueryParams {
    /** Scope the query to a particular principal */
    principal?: Principal | undefined;
    /** The maximum number of neurons returned by the method `list_neurons` */
    limit?: number;
    /** Index the search to returns a list that starts after specified neuron id */
    beforeNeuronId?: SnsGovernanceDid.NeuronId;
}
/**
 * The parameters available to list Sns proposals
 */
export interface SnsListProposalsParams extends QueryParams {
    includeRewardStatus?: SnsProposalRewardStatus[];
    beforeProposal?: SnsGovernanceDid.ProposalId;
    limit?: number;
    excludeType?: bigint[];
    includeStatus?: SnsProposalDecisionStatus[];
    includeTopics?: Array<SnsGovernanceDid.Topic | null>;
}
export type SnsListTopicsParams = QueryParams;
/**
 * The parameters to get an sns proposal
 */
export interface SnsGetProposalParams extends QueryParams {
    proposalId: SnsGovernanceDid.ProposalId;
}
/**
 * The parameters to get a Sns neuron
 */
export interface SnsGetNeuronParams extends QueryParams {
    neuronId: SnsGovernanceDid.NeuronId;
}
export interface SnsStakeNeuronParams extends Omit<QueryParams, "certified"> {
    stakeE8s: IcrcLedgerDid.Tokens;
    source: IcrcAccount;
    controller: Principal;
    createdAt?: bigint;
    fee?: bigint;
}
export interface SnsIncreaseStakeNeuronParams extends Omit<QueryParams, "certified"> {
    stakeE8s: IcrcLedgerDid.Tokens;
    source: IcrcAccount;
    neuronId: SnsGovernanceDid.NeuronId;
}
export interface SnsClaimOrRefreshArgs extends Omit<QueryParams, "certified"> {
    subaccount: Uint8Array;
    memo?: bigint;
    controller?: Principal;
}
/**
 * General neuron management request parameter interface
 */
interface SnsNeuronManagementParams extends Omit<QueryParams, "certified"> {
    neuronId: SnsGovernanceDid.NeuronId;
}
/**
 * The parameters to add permissions to a neuron
 */
export interface SnsNeuronPermissionsParams extends SnsNeuronManagementParams {
    principal: Principal;
    permissions: SnsNeuronPermissionType[];
}
/**
 * The parameters to split a neuron
 */
export interface SnsSplitNeuronParams extends SnsNeuronManagementParams {
    amount: E8s;
    memo: bigint;
}
/**
 * The parameters to disburse a neuron
 */
export interface SnsDisburseNeuronParams extends SnsNeuronManagementParams {
    amount?: E8s;
    toAccount?: IcrcAccount;
}
/**
 * The parameters to set dissolve timestamp
 */
export interface SnsSetDissolveTimestampParams extends SnsNeuronManagementParams {
    dissolveTimestampSeconds: bigint;
}
/**
 * The parameters to increase dissolve delay
 */
export interface SnsIncreaseDissolveDelayParams extends SnsNeuronManagementParams {
    additionalDissolveDelaySeconds: number;
}
/**
 * The parameters to follow by ns-function
 */
export interface SnsSetTopicFollowees extends SnsNeuronManagementParams {
    functionId: bigint;
    followees: SnsGovernanceDid.NeuronId[];
}
/**
 * The parameters to follow by topic
 */
export interface SnsSetFollowingParams extends SnsNeuronManagementParams {
    topicFollowing: Array<{
        topic: SnsGovernanceDid.Topic;
        followees: Array<{
            neuronId: SnsGovernanceDid.NeuronId;
            alias?: string;
        }>;
    }>;
}
/**
 * The parameters to register vote
 */
export interface SnsRegisterVoteParams extends SnsNeuronManagementParams {
    vote: SnsVote;
    proposalId: SnsGovernanceDid.ProposalId;
}
/**
 * The parameters to claim a neuron
 */
export interface SnsClaimNeuronParams {
    memo: bigint;
    controller: Principal;
    subaccount: IcrcLedgerDid.Subaccount;
}
/**
 * The parameters to stake maturity of a neuron
 */
export interface SnsNeuronStakeMaturityParams extends SnsNeuronManagementParams {
    percentageToStake?: number;
}
/**
 * The parameters to disburse maturity of a neuron
 */
export interface SnsNeuronDisburseMaturityParams extends SnsNeuronManagementParams {
    toAccount?: IcrcAccount;
    percentageToDisburse: number;
}
/**
 * The parameters to toggle auto stake maturity of a neuron
 */
export interface SnsNeuronAutoStakeMaturityParams extends SnsNeuronManagementParams {
    autoStake: boolean;
}
export {};
