/**************************************************************
 * THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *
 **************************************************************/

/**
 * Admin features of the SuiNS application. Meant to be called directly by the
 * suins admin.
 */

import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js';
import { bcs } from '@mysten/sui/bcs';
import { type Transaction } from '@mysten/sui/transactions';
const $moduleName = '@suins/core::admin';
export const Admin = new MoveStruct({
	name: `${$moduleName}::Admin`,
	fields: {
		dummy_field: bcs.bool(),
	},
});
export interface AuthorizeArguments {
	cap: RawTransactionArgument<string>;
	suins: RawTransactionArgument<string>;
}
export interface AuthorizeOptions {
	package?: string;
	arguments:
		| AuthorizeArguments
		| [cap: RawTransactionArgument<string>, suins: RawTransactionArgument<string>];
}
/**
 * Authorize the admin application in the SuiNS to get access to protected
 * functions. Must be called in order to use the rest of the functions.
 */
export function authorize(options: AuthorizeOptions) {
	const packageAddress = options.package ?? '@suins/core';
	const argumentsTypes = [null, null] satisfies (string | null)[];
	const parameterNames = ['cap', 'suins'];
	return (tx: Transaction) =>
		tx.moveCall({
			package: packageAddress,
			module: 'admin',
			function: 'authorize',
			arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
		});
}
export interface ReserveDomainArguments {
	_: RawTransactionArgument<string>;
	suins: RawTransactionArgument<string>;
	domainName: RawTransactionArgument<string>;
	noYears: RawTransactionArgument<number>;
}
export interface ReserveDomainOptions {
	package?: string;
	arguments:
		| ReserveDomainArguments
		| [
				_: RawTransactionArgument<string>,
				suins: RawTransactionArgument<string>,
				domainName: RawTransactionArgument<string>,
				noYears: RawTransactionArgument<number>,
		  ];
}
/** Reserve a `domain` in the `SuiNS`. */
export function reserveDomain(options: ReserveDomainOptions) {
	const packageAddress = options.package ?? '@suins/core';
	const argumentsTypes = [null, null, '0x1::string::String', 'u8', '0x2::clock::Clock'] satisfies (
		| string
		| null
	)[];
	const parameterNames = ['_', 'suins', 'domainName', 'noYears'];
	return (tx: Transaction) =>
		tx.moveCall({
			package: packageAddress,
			module: 'admin',
			function: 'reserve_domain',
			arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
		});
}
export interface ReserveDomainsArguments {
	_: RawTransactionArgument<string>;
	suins: RawTransactionArgument<string>;
	domains: RawTransactionArgument<string[]>;
	noYears: RawTransactionArgument<number>;
}
export interface ReserveDomainsOptions {
	package?: string;
	arguments:
		| ReserveDomainsArguments
		| [
				_: RawTransactionArgument<string>,
				suins: RawTransactionArgument<string>,
				domains: RawTransactionArgument<string[]>,
				noYears: RawTransactionArgument<number>,
		  ];
}
/** Reserve a list of domains. */
export function reserveDomains(options: ReserveDomainsOptions) {
	const packageAddress = options.package ?? '@suins/core';
	const argumentsTypes = [
		null,
		null,
		'vector<0x1::string::String>',
		'u8',
		'0x2::clock::Clock',
	] satisfies (string | null)[];
	const parameterNames = ['_', 'suins', 'domains', 'noYears'];
	return (tx: Transaction) =>
		tx.moveCall({
			package: packageAddress,
			module: 'admin',
			function: 'reserve_domains',
			arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
		});
}
