import { z } from 'zod' export const adminPaymentStatusSchema = z.enum(['active', 'no_plan', 'expired']) export const adminComplexListItemSchema = z.object({ id: z.string(), complexName: z.string(), complexSlug: z.string(), city: z.string().nullable(), planCode: z.string().nullable(), planName: z.string().nullable(), userCount: z.number().int().nonnegative(), courtCount: z.number().int().nonnegative(), avgBookingsPerDay: z.number().nonnegative(), paymentStatus: adminPaymentStatusSchema, }) export const adminComplexStatsSchema = z.object({ id: z.string(), complexName: z.string(), complexSlug: z.string(), city: z.string().nullable(), adminEmail: z.string(), planCode: z.string().nullable(), planName: z.string().nullable(), userCount: z.number().int().nonnegative(), courtCount: z.number().int().nonnegative(), totalBookings: z.number().int().nonnegative(), avgBookingsPerDay: z.number().nonnegative(), bookingsByStatus: z.object({ confirmed: z.number().int().nonnegative(), cancelled: z.number().int().nonnegative(), completed: z.number().int().nonnegative(), noshow: z.number().int().nonnegative(), }), paymentStatus: adminPaymentStatusSchema, }) export const adminCreatePlanSchema = z.object({ code: z.string().trim().min(1).max(10), name: z.string().trim().min(1).max(30), price: z.number().nonnegative(), rules: z.any(), }) export const adminUpdatePlanSchema = z.object({ name: z.string().trim().min(1).max(30).optional(), price: z.number().nonnegative().optional(), rules: z.any().optional(), }) export const adminUserSchema = z.object({ id: z.string(), name: z.string(), email: z.string(), role: z.string(), banned: z.boolean(), bannedAt: z.string().datetime().nullable(), banReason: z.string().nullable(), createdAt: z.string().datetime(), complexCount: z.number().int().nonnegative(), activeSessions: z.number().int().nonnegative(), }) export const adminBlockUserSchema = z.object({ banReason: z.string().max(500).optional(), }) export const adminGlobalStatsSchema = z.object({ totalComplexes: z.number().int().nonnegative(), totalUsers: z.number().int().nonnegative(), totalCourts: z.number().int().nonnegative(), totalBookings: z.number().int().nonnegative(), }) export const adminUserSessionSchema = z.object({ id: z.string(), createdAt: z.string().datetime(), expiresAt: z.string().datetime(), ipAddress: z.string().nullable(), userAgent: z.string().nullable(), city: z.string().nullable(), country: z.string().nullable(), countryCode: z.string().nullable(), }) export type AdminComplexListItem = z.infer export type AdminComplexStats = z.infer export type AdminCreatePlanInput = z.infer export type AdminUpdatePlanInput = z.infer export type AdminUser = z.infer export type AdminBlockUserInput = z.infer export type AdminGlobalStats = z.infer export type AdminPaymentStatus = z.infer export type AdminUserSession = z.infer export const adminGeoCitySchema = z.object({ city: z.string(), userCount: z.number().int().nonnegative(), }) export const adminGeoCountrySchema = z.object({ country: z.string(), countryCode: z.string(), totalUsers: z.number().int().nonnegative(), cities: z.array(adminGeoCitySchema), }) export const adminGeoStatsSchema = z.object({ countries: z.array(adminGeoCountrySchema), totalUniqueCountries: z.number().int().nonnegative(), }) export type AdminGeoCity = z.infer export type AdminGeoCountry = z.infer export type AdminGeoStats = z.infer