import { z } from 'zod';

export const fetchTokenDataSchema = z.object({
  networkId: z.string().uuid(),
  contractAddress: z.string().min(1).nullable().optional(),
  cmcId: z.number().int().positive().nullable().optional(),
});

export type FetchTokenDataInput = z.infer<typeof fetchTokenDataSchema>;

export const createTokenSchema = z.object({
  isNative: z.boolean(),
  address: z.string().nullable().optional(),
  networkId: z.string().uuid(),
  thumbnail: z.string().nullable().optional(),
  name: z.string().min(1),
  symbol: z.string().min(1),
  decimals: z.number().int().nonnegative(),
  code: z.string().min(1),
  cmcId: z.number().int().positive().optional(),
  info: z.string().nullable().optional(),
  isActive: z.boolean().default(true),
  minimumSwapValue: z.number().nonnegative().nullable().optional(),
});

export type CreateTokenInput = z.infer<typeof createTokenSchema>;

export const updateTokenSchema = z.object({
  isNative: z.boolean().optional(),
  address: z.string().nullable().optional(),
  networkId: z.string().uuid().optional(),
  thumbnail: z.string().nullable().optional(),
  name: z.string().min(1).optional(),
  symbol: z.string().min(1).optional(),
  decimals: z.number().int().nonnegative().optional(),
  code: z.string().min(1).optional(),
  cmcId: z.number().int().positive().nullable().optional(),
  info: z.string().nullable().optional(),
  isActive: z.boolean().optional(),
  minimumSwapValue: z.number().nonnegative().nullable().optional(),
});

export type UpdateTokenInput = z.infer<typeof updateTokenSchema>;

export const updateTokenMinimumSwapValueSchema = z.object({
  minimumSwapValue: z.number().nonnegative().nullable(),
});

export type UpdateTokenMinimumSwapValueInput = z.infer<typeof updateTokenMinimumSwapValueSchema>;
