import type { AnchorTypes } from "@saberhq/anchor-contrib";
import { PublicKey } from "@solana/web3.js";

import * as MINTER_TYPES from "../../idl";

export const MINTER_ADDRESS = new PublicKey(
  "mtrjCxnDUC9ZmdZU9qoLvsdTxUoKoMUtk96zoQBu6AY"
);

export const TOKEN_METADATA_PROGRAM_ID = new PublicKey(
  "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
);

export const MINTER_PREFIX = "minter";
export const REDEEMED_MINTS_PREFIX = "mints";

export const MINTER_DISCRIMINATOR = "minter";
export const REDEEMED_MINTS_DISCRIMINATOR = "redeemed-mints";

export const MINTER_ACCOUNT_NAME = "minter";
export const REDEEMED_MINTS_ACCOUNT_NAME = "redeemedMints";

export const MINTER_PROJECT_ID_OFFSET = 8 + 1 + 32;
export const REDEEMED_MINTS_MINTER_ID_OFFSET = 8 + 4 + 32;

export type MINTER_PROGRAM = MINTER_TYPES.BlockassetMinter;

export const MINTER_IDL = MINTER_TYPES.IDL;

export type MinterTypes = AnchorTypes<MINTER_PROGRAM>;

export type Accounts = MinterTypes["Accounts"];
export type MinterData = Accounts["minter"];
export type RedeemedMintsDataRaw = Accounts["redeemedMints"];
export type RedeemedMintsData = RedeemedMintsDataRaw & {
  mints: PublicKey[];
};

export enum MetadataKind {
  NoRestriction = 1,
  UniqueNames = 2,
  UniqueSymbols = 3,
}
