import type { BigNumberish } from "ethers";
import type { CyberValleyEventManager } from "../../typechain-types";

export type EventApprovedEvent = { eventRequestId: BigNumberish };
export type EventDeclinedEvent = { eventRequestId: BigNumberish };
export type EventPlaceUpdatedEvent = {
  eventPlaceId: BigNumberish;
  maxTickets: BigNumberish;
  minTickets: BigNumberish;
  minPrice: BigNumberish;
  daysBeforeCancel: BigNumberish;
  minDays: BigNumberish;
  available: boolean;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
};
export type EventUpdatedEvent = {
  id: BigNumberish;
  eventPlaceId: BigNumberish;
  ticketPrice: BigNumberish;
  startDate: BigNumberish;
  daysAmount: BigNumberish;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
};
export type NewEventRequestEvent = {
  creator: string;
  id: BigNumberish;
  eventPlaceId: BigNumberish;
  ticketPrice: BigNumberish;
  startDate: BigNumberish;
  daysAmount: BigNumberish;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
};
export type RoleAdminChangedEvent = {
  role: string;
  previousAdminRole: string;
  newAdminRole: string;
};
export type RoleGrantedEvent = {
  role: string;
  account: string;
  sender: string;
};
export type RoleRevokedEvent = {
  role: string;
  account: string;
  sender: string;
};

// Struct types
export type Multihash = {
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
};

export type EventPlace = {
  maxTickets: BigNumberish;
  minTickets: BigNumberish;
  minPrice: BigNumberish;
  daysBeforeCancel: BigNumberish;
  minDays: BigNumberish;
  meta: Multihash;
  eventDepositSize: BigNumberish;
};

export type Event = {
  creator: string;
  eventPlaceId: BigNumberish;
  ticketPrice: BigNumberish;
  startDate: BigNumberish;
  daysAmount: BigNumberish;
  status: BigNumberish;
  meta: Multihash;
};

// Method argument types
export type SubmitEventPlaceRequestArgs = {
  maxTickets: BigNumberish;
  minTickets: BigNumberish;
  minPrice: BigNumberish;
  daysBeforeCancel: BigNumberish;
  minDays: BigNumberish;
  available: boolean;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
  eventDepositSize: BigNumberish;
};

export type ApproveEventPlaceArgs = {
  eventPlaceId: BigNumberish;
  eventDepositSize: BigNumberish;
};

export type DeclineEventPlaceArgs = {
  eventPlaceId: BigNumberish;
};

export type ApproveEventArgs = {
  eventId: BigNumberish;
  distributionProfileId: BigNumberish;
};

export type DeclineEventArgs = {
  eventId: BigNumberish;
};

export type CreateEventPlaceArgs = {
  maxTickets: BigNumberish;
  minTickets: BigNumberish;
  minPrice: BigNumberish;
  daysBeforeCancel: BigNumberish;
  minDays: BigNumberish;
  available: boolean;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
  eventDepositSize: BigNumberish;
};

export type CategoryInput = {
  name: string;
  discountPercentage: BigNumberish;
  quota: BigNumberish;
  hasQuota: boolean;
};

export type SubmitEventRequestArgs = {
  eventPlaceId: BigNumberish;
  ticketPrice: BigNumberish;
  startDate: BigNumberish;
  daysAmount: BigNumberish;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
  categories: CategoryInput[];
};

export type UpdateEventArgs = {
  eventId: BigNumberish;
  eventPlaceId: BigNumberish;
  ticketPrice: BigNumberish;
  startDate: BigNumberish;
  daysAmount: BigNumberish;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
};

// Base event args without categories (for updateEvent)
export type BaseEventArgs = {
  eventPlaceId: BigNumberish;
  ticketPrice: BigNumberish;
  startDate: BigNumberish;
  daysAmount: BigNumberish;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
};

export type UpdateEventPlaceArgs = {
  eventPlaceId: BigNumberish;
  maxTickets: BigNumberish;
  minTickets: BigNumberish;
  minPrice: BigNumberish;
  daysBeforeCancel: BigNumberish;
  minDays: BigNumberish;
  available: boolean;
  digest: string;
  hashFunction: BigNumberish;
  size: BigNumberish;
  eventDepositSize: BigNumberish;
};

export type CloseEventArgs = {
  eventId: BigNumberish;
};

export type CancelEventArgs = {
  eventId: BigNumberish;
};

// Conversion functions

export const submitEventPlaceRequestArgsToArray = (
  args: SubmitEventPlaceRequestArgs,
): Parameters<CyberValleyEventManager["submitEventPlaceRequest"]> => {
  return [
    args.maxTickets,
    args.minTickets,
    args.minPrice,
    args.daysBeforeCancel,
    args.minDays,
    args.available,
    args.digest,
    args.hashFunction,
    args.size,
    args.eventDepositSize,
  ];
};

export const approveEventPlaceArgsToArray = (
  args: ApproveEventPlaceArgs,
): Parameters<CyberValleyEventManager["approveEventPlace"]> => {
  return [args.eventPlaceId, args.eventDepositSize];
};

export const declineEventPlaceArgsToArray = (
  args: DeclineEventPlaceArgs,
): Parameters<CyberValleyEventManager["declineEventPlace"]> => {
  return [args.eventPlaceId];
};

export const approveEventArgsToArray = (
  args: ApproveEventArgs,
): Parameters<CyberValleyEventManager["approveEvent"]> => {
  return [args.eventId, args.distributionProfileId];
};

export const declineEventArgsToArray = (
  args: DeclineEventArgs,
): Parameters<CyberValleyEventManager["declineEvent"]> => {
  return [args.eventId];
};

export const submitEventRequestArgsToArray = (
  args: SubmitEventRequestArgs,
): Parameters<CyberValleyEventManager["submitEventRequest"]> => {
  return [
    args.eventPlaceId,
    args.ticketPrice,
    args.startDate,
    args.daysAmount,
    args.digest,
    args.hashFunction,
    args.size,
    args.categories,
  ];
};

// Helper for updateEvent (no categories)
export const baseEventArgsToArray = (
  args: BaseEventArgs,
): [
  BigNumberish,
  BigNumberish,
  BigNumberish,
  BigNumberish,
  string,
  BigNumberish,
  BigNumberish,
] => {
  return [
    args.eventPlaceId,
    args.ticketPrice,
    args.startDate,
    args.daysAmount,
    args.digest,
    args.hashFunction,
    args.size,
  ];
};

export const updateEventArgsToArray = (
  args: UpdateEventArgs,
): Parameters<CyberValleyEventManager["updateEvent"]> => {
  return [
    args.eventId,
    args.eventPlaceId,
    args.ticketPrice,
    args.startDate,
    args.daysAmount,
    args.digest,
    args.hashFunction,
    args.size,
  ];
};

export const updateEventPlaceArgsToArray = (
  args: UpdateEventPlaceArgs,
): Parameters<CyberValleyEventManager["updateEventPlace"]> => {
  return [
    args.eventPlaceId,
    args.maxTickets,
    args.minTickets,
    args.minPrice,
    args.daysBeforeCancel,
    args.minDays,
    args.available,
    args.digest,
    args.hashFunction,
    args.size,
    args.eventDepositSize,
  ];
};

export const closeEventArgsToArray = (
  args: CloseEventArgs,
): Parameters<CyberValleyEventManager["closeEvent"]> => {
  return [args.eventId];
};

export const cancelEventArgsToArray = (
  args: CancelEventArgs,
): Parameters<CyberValleyEventManager["cancelEvent"]> => {
  return [args.eventId];
};

Homonyms

soft3/js/src/types.ts
soft3/js/src/codec/cyber/rank/v1beta1/types.ts
soft3/js/src/codec/cyber/grid/v1beta1/types.ts
soft3/js/src/codec/cyber/graph/v1beta1/types.ts
soft3/js/src/codec/cyber/bandwidth/v1beta1/types.ts
soft3/js/src/codec/cyber/resources/v1beta1/types.ts
cyberia/research/events/client/src/entities/event/model/types.ts
cyberia/research/events/client/src/features/event-form/model/types.ts
cyberia/research/events/client/src/entities/order/model/types.ts
cyberia/research/events/client/src/entities/user/model/types.ts
cyberia/research/events/client/src/features/ticket/model/types.ts
cyberia/research/events/client/src/features/place-form/model/types.ts
cyberia/research/events/client/src/entities/place/model/types.ts
cyberia/research/events/client/src/entities/geodata/model/types.ts
cyberia/research/events/client/src/shared/ui/expandable/types.ts
cyberia/research/events/client/src/entities/notification/model/types.ts

Graph