/* eslint-disable */

// @ts-nocheck

// This file was automatically generated by @icp-sdk/bindgen@0.2.0.
// You should NOT make any changes in this file as it will be overwritten.
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.

import type {ActorMethod} from '@icp-sdk/core/agent';
import type {IDL} from '@icp-sdk/core/candid';

export interface DurationSeconds {
  amount: bigint;
}
export interface TextValue {
  content: string;
}
export interface TimestampSeconds {
  amount: bigint;
}
export interface TokenAmount {
  decimals: number;
  amount: bigint;
  symbol: string;
}
export type Value =
  | {Text: TextValue}
  | {TokenAmount: TokenAmount}
  | {TimestampSeconds: TimestampSeconds}
  | {DurationSeconds: DurationSeconds};
export interface icrc21_consent_info {
  /**
   * Metadata of the consent_message.
   */
  metadata: icrc21_consent_message_metadata;
  /**
   * Consent message describing in a human-readable format what the call will do.
   *
   * The message should adhere as close as possible to the user_preferences specified in the consent_message_spec
   * of the icrc21_consent_message_request.
   * If the message is not available for the given user_preferences any fallback message should be used. Providing a
   * message should be preferred over sending an icrc21_error.
   * The metadata must match the consent_message provided.
   *
   * The message should be short and concise.
   * It should only contain information that is:
   * * relevant to the user
   * * relevant given the canister call argument
   *
   * The message must fit the following context shown to
   * the user on the signer UI:
   * ┌─────────────────────────────────┐
   * │  Approve the following action?  │
   * │  ┌───────────────────────────┐  │
   * │  │    <consent_message>      │  │
   * │  └───────────────────────────┘  │
   * │  ┌───────────┐   ┌───────────┐  │
   * │  │  Reject   │   │  Approve  │  │
   * │  └───────────┘   └───────────┘  │
   * └─────────────────────────────────┘
   */
  consent_message: icrc21_consent_message;
}
export type icrc21_consent_message =
  | {
      /**
       * Message for a simple display able to handle multiple fields title and content.
       * It's able to do line wrapping and splits fields into multiple pages if they're too long.
       * Uses plain text, without any embedded formatting elements.
       */
      FieldsDisplayMessage: {
        /**
         * Canister call fields for review e.g. Amount 234.73 ICP
         */
        fields: Array<[string, Value]>;
        /**
         * Context and type of canister call, accurate and concise e.g. Send ICP
         */
        intent: string;
      };
    }
  | {
      /**
       * Message for a generic display able to handle large documents and do proper line wrapping and pagination / scrolling.
       * Uses Markdown formatting, no external resources (e.g. images) are allowed.
       */
      GenericDisplayMessage: string;
    };
export interface icrc21_consent_message_metadata {
  /**
   * The users local timezone offset in minutes from UTC.
   * Applicable when converting timestamps to human-readable format.
   *
   * If absent in the request, the canister should fallback to the UTC timezone when creating the consent message.
   * If absent in the response, the canister is indicating that the consent message is not timezone sensitive.
   */
  utc_offset_minutes: [] | [number];
  /**
   * BCP-47 language tag. See https://www.rfc-editor.org/rfc/bcp/bcp47.txt
   */
  language: string;
}
export interface icrc21_consent_message_request {
  /**
   * Argument of the canister call.
   */
  arg: Uint8Array;
  /**
   * Method name of the canister call.
   */
  method: string;
  /**
   * User preferences with regards to the consent message presented to the end-user.
   */
  user_preferences: icrc21_consent_message_spec;
}
export type icrc21_consent_message_response =
  | {
      /**
       * The call is ok, consent message is provided.
       */
      Ok: icrc21_consent_info;
    }
  | {
      /**
       * The call is not ok, error is provided.
       */
      Err: icrc21_error;
    };
export interface icrc21_consent_message_spec {
  /**
   * Metadata of the consent message.
   */
  metadata: icrc21_consent_message_metadata;
  /**
   * Information about the device responsible for presenting the consent message to the user.
   * If absent in the request, the canister should fallback to one of the values defined in this spec (ICRC-21).
   */
  device_spec:
    | []
    | [
        | {
            /**
             * A generic display able to handle large documents and do line wrapping and pagination / scrolling.
             * Text must be Markdown formatted, no external resources (e.g. images) are allowed.
             */
            GenericDisplay: null;
          }
        | {
            /**
             * A simple display able to handle multiple fields with a title and content.
             * It's able to do line wrapping and splits fields into multiple pages if they're too long.
             * Text must be plain text without any embedded formatting elements.
             */
            FieldsDisplay: null;
          }
      ];
}
export type icrc21_error =
  | {
      /**
       * Any error not covered by the above variants.
       */
      GenericError: {
        /**
         * Human readable technical description of the error intended for developers, not the end-user.
         */
        description: string;
        /**
         * Machine parsable error. Can be chosen by the target canister but should indicate the error category.
         */
        error_code: bigint;
      };
    }
  | {
      /**
       * The canister did not provide a consent message for because payment was missing or insufficient.
       *
       * This error is used to account for payment extensions to be added in the future:
       * While small consent messages are easy and cheap to provide, this might not generally be the case for all consent
       * messages. To avoid future breaking changes, when introducing a payment flow, this error is already introduced
       * even though there no standardized payment flow yet.
       */
      InsufficientPayment: icrc21_error_info;
    }
  | {
      /**
       * The canister does not support this call (i.e. it will lead to a rejection or error response).
       * Reasons might be (non-exhaustive list):
       * * the canister call is malformed (e.g. wrong method name, argument cannot be decoded)
       * * the arguments exceed certain bounds
       *
       * The developer should provide more information about the error using the description in icrc21_error_info.
       */
      UnsupportedCanisterCall: icrc21_error_info;
    }
  | {
      /**
       * The canister cannot produce a consent message for this call.
       * Reasons might be (non-exhaustive list):
       * * it is an internal call not intended for end-users
       * * the canister developer has not yet implemented a consent message for this call
       *
       * The developer should provide more information about the error using the description in icrc21_error_info.
       */
      ConsentMessageUnavailable: icrc21_error_info;
    };
export interface icrc21_error_info {
  /**
   * Human readable technical description of the error intended for developers, not the end-user.
   */
  description: string;
}
export interface _SERVICE {
  /**
   * Returns a list of supported standards that this canister implements.
   * The result must include an entry for ICRC-21:
   * record { name = "ICRC-21"; url = "https://github.com/dfinity/ICRC/blob/main/ICRCs/ICRC-21/ICRC-21.md" }
   *
   * See ICRC-10 for more information: https://github.com/dfinity/ICRC/blob/main/ICRCs/ICRC-10/ICRC-10.md
   */
  icrc10_supported_standards: ActorMethod<[], Array<{url: string; name: string}>>;
  /**
   * Returns a human-readable consent message for the given canister call.
   *
   * This call must not require authentication (i.e. must be available for the anonymous sender).
   * If the call is made with a non-anonymous identity, the response may be tailored to the identity.
   *
   * This is currently an update call. As soon as secure (replicated) query calls are available, this will be changed to such a replicated query call.
   */
  icrc21_canister_call_consent_message: ActorMethod<
    [icrc21_consent_message_request],
    icrc21_consent_message_response
  >;
}
export declare const idlService: IDL.ServiceClass;
export declare const idlInitArgs: IDL.Type[];
export declare const idlFactory: IDL.InterfaceFactory;
export declare const init: (args: {IDL: typeof IDL}) => IDL.Type[];
