import { Canister, type QueryParams } from "@dfinity/utils";
import { type SnsGovernanceDid, type SnsGovernanceService } from "../declarations";
import type { SnsCanisterOptions } from "./types/canister.options";
import type { SnsClaimNeuronParams, SnsDisburseNeuronParams, SnsGetNeuronParams, SnsGetProposalParams, SnsIncreaseDissolveDelayParams, SnsListNeuronsParams, SnsListProposalsParams, SnsListTopicsParams, SnsNeuronAutoStakeMaturityParams, SnsNeuronDisburseMaturityParams, SnsNeuronPermissionsParams, SnsNeuronStakeMaturityParams, SnsRegisterVoteParams, SnsSetDissolveTimestampParams, SnsSetFollowingParams, SnsSetTopicFollowees, SnsSplitNeuronParams } from "./types/governance.params";
export declare class SnsGovernanceCanister extends Canister<SnsGovernanceService> {
    /**
     * Instantiate a canister to interact with the governance of a Sns project.
     *
     * @param {SnsCanisterOptions} options Miscellaneous options to initialize the canister. Its ID being the only mandatory parammeter.
     */
    static create(options: SnsCanisterOptions<SnsGovernanceService>): SnsGovernanceCanister;
    /**
     * List the neurons of the Sns
     */
    listNeurons: (params: SnsListNeuronsParams) => Promise<SnsGovernanceDid.Neuron[]>;
    /**
     * List the proposals of the Sns
     */
    listProposals: (params: SnsListProposalsParams) => Promise<SnsGovernanceDid.ListProposalsResponse>;
    /**
     *
     * List the topics of the Sns
     */
    listTopics: (params: SnsListTopicsParams) => Promise<SnsGovernanceDid.ListTopicsResponse>;
    /**
     * Get the proposal of the Sns
     */
    getProposal: (params: SnsGetProposalParams) => Promise<SnsGovernanceDid.ProposalData>;
    /**
     * List Nervous System Functions
     * Neurons can follow other neurons in specific Nervous System Functions.
     */
    listNervousSystemFunctions: (params: QueryParams) => Promise<SnsGovernanceDid.ListNervousSystemFunctionsResponse>;
    /**
     * Get the Sns metadata (title, description, etc.)
     */
    metadata: (params: QueryParams) => Promise<SnsGovernanceDid.GetMetadataResponse>;
    /**
     * Get the Sns nervous system parameters (default followees, max dissolve delay, max number of neurons, etc.)
     */
    nervousSystemParameters: (params: QueryParams) => Promise<SnsGovernanceDid.NervousSystemParameters>;
    /**
     * Get the neuron of the Sns
     */
    getNeuron: (params: SnsGetNeuronParams) => Promise<SnsGovernanceDid.Neuron>;
    /**
     * Same as `getNeuron` but returns undefined instead of raising error when not found.
     */
    queryNeuron: (params: SnsGetNeuronParams) => Promise<SnsGovernanceDid.Neuron | undefined>;
    /**
     * Manage neuron. For advanced users.
     */
    manageNeuron: (request: SnsGovernanceDid.ManageNeuron) => Promise<SnsGovernanceDid.ManageNeuronResponse>;
    /**
     * Add permissions to a neuron for a specific principal
     */
    addNeuronPermissions: (params: SnsNeuronPermissionsParams) => Promise<void>;
    /**
     * Remove permissions to a neuron for a specific principal
     */
    removeNeuronPermissions: (params: SnsNeuronPermissionsParams) => Promise<void>;
    /**
     * Split neuron
     */
    splitNeuron: (params: SnsSplitNeuronParams) => Promise<SnsGovernanceDid.NeuronId | undefined>;
    /**
     * Disburse neuron on Account
     */
    disburse: (params: SnsDisburseNeuronParams) => Promise<void>;
    /**
     * Start dissolving process of a neuron
     */
    startDissolving: (neuronId: SnsGovernanceDid.NeuronId) => Promise<void>;
    /**
     * Stop dissolving process of a neuron
     */
    stopDissolving: (neuronId: SnsGovernanceDid.NeuronId) => Promise<void>;
    /**
     * Stake the maturity of a neuron.
     *
     * @param {neuronId: NeuronId; percentageToStake: number;} params
     * @param {NeuronId} neuronId The id of the neuron for which to stake the maturity
     * @param {number} percentageToStake Optional. Percentage of the current maturity to stake. If not provided, all of the neuron's current maturity will be staked.
     */
    stakeMaturity: ({ neuronId, percentageToStake, }: SnsNeuronStakeMaturityParams) => Promise<void>;
    /**
     * Disburse the maturity of a neuron.
     *
     * @param {neuronId: NeuronId; toAccount?: IcrcAccount; percentageToDisburse: number; } params
     * @param {IcrcAccount} toAccount. Account to disburse maturity.
     * @param {NeuronId} neuronId The id of the neuron for which to disburse the maturity
     * @param {number} percentageToDisburse What percentage of the available maturity to disburse.
     */
    disburseMaturity: (params: SnsNeuronDisburseMaturityParams) => Promise<void>;
    /**
     * Changes auto-stake maturity for a Neuron.
     *
     * @param {neuronId: NeuronId; autoStake: boolean;} params
     * @param {NeuronId} neuronId The id of the neuron for which to request a change of the auto stake feature
     * @param {number} autoStake `true` to enable the auto-stake maturity for this neuron, `false` to turn it off
     */
    autoStakeMaturity: (params: SnsNeuronAutoStakeMaturityParams) => Promise<void>;
    /**
     * Increase dissolve delay of a neuron
     */
    setDissolveTimestamp: (params: SnsSetDissolveTimestampParams) => Promise<void>;
    /**
     * Increase dissolve delay of a neuron
     */
    increaseDissolveDelay: (params: SnsIncreaseDissolveDelayParams) => Promise<void>;
    /**
     * Sets followees of a neuron for a specific Nervous System Function
     * @deprecated will be replaced by `setFollowing` in the future.
     */
    setTopicFollowees: (params: SnsSetTopicFollowees) => Promise<void>;
    /**
     * Sets followees of a neuron for topics
     */
    setFollowing: (params: SnsSetFollowingParams) => Promise<void>;
    /**
     * Registers vote for a proposal from the neuron passed.
     */
    registerVote: (params: SnsRegisterVoteParams) => Promise<void>;
    /**
     * Refresh neuron
     */
    refreshNeuron: (neuronId: SnsGovernanceDid.NeuronId) => Promise<void>;
    /**
     * Claim neuron
     */
    claimNeuron: ({ memo, controller, subaccount, }: SnsClaimNeuronParams) => Promise<SnsGovernanceDid.NeuronId>;
    /**
     *
     * @param response SnsGovernanceDid.ManageNeuronResponse
     * @throws SnsGovernanceError
     */
    private assertManageNeuronError;
}
