import { z } from 'zod';

export const registerSchema = z.object({
  name: z.string().min(2).max(100),
  email: z.string().email(),
  password: z.string().min(8).max(128),
  slug: z.string().min(2).max(50).regex(/^[a-z0-9-]+$/).optional(),
});

export const loginSchema = z.object({
  email: z.string().email(),
  password: z.string().min(1),
});

export const refreshTokenSchema = z.object({
  refreshToken: z.string().min(1),
});

export const updateTenantSchema = z.object({
  name: z.string().min(2).max(100).optional(),
  domain: z.string().max(255).optional().nullable(),
  webhookUrl: z.string().url().optional().nullable(),
  settings: z.any().optional(),
});

export const createProductSchema = z.object({
  externalId: z.string().max(255).optional(),
  name: z.string().min(1).max(500),
  description: z.string().max(5000).optional(),
  imageUrl: z.string().url().optional(),
  price: z.number().positive().optional(),
  startingPrice: z.number().positive().optional(),
  minBidIncrement: z.number().positive().optional(),
  currency: z.string().length(3).default('TRY'),
  stockQuantity: z.number().int().min(1).default(1),
});

export const updateProductSchema = createProductSchema.partial();

export const startSessionSchema = z.object({
  igLiveVideoId: z.string().optional(),
  title: z.string().min(1).max(255),
  settings: z.any().optional(),
});

export const activateAuctionSchema = z.object({
  productId: z.string().uuid(),
  liveSessionId: z.string().uuid(),
  mode: z.enum(['fixed_price', 'auction']),
  startingPrice: z.number().positive(),
  minBidIncrement: z.number().positive().optional(),
  timeLimitSeconds: z.number().int().positive().optional().nullable(),
});

export const linkUserSchema = z.object({
  igUsername: z.string().min(1).max(100),
  email: z.string().email().optional(),
  displayName: z.string().max(200).optional(),
  externalUserId: z.string().max(255).optional(),
});

export const paginationSchema = z.object({
  page: z.coerce.number().int().min(1).default(1),
  limit: z.coerce.number().int().min(1).max(100).default(20),
});

export type RegisterInput = z.infer<typeof registerSchema>;
export type LoginInput = z.infer<typeof loginSchema>;
export type CreateProductInput = z.infer<typeof createProductSchema>;
export type UpdateProductInput = z.infer<typeof updateProductSchema>;
export type StartSessionInput = z.infer<typeof startSessionSchema>;
export type ActivateAuctionInput = z.infer<typeof activateAuctionSchema>;
export type LinkUserInput = z.infer<typeof linkUserSchema>;
