import z from "zod" import { bedwarsStatsSchema, buildBattleStatsSchema, duelsStatsSchema, megawallsStats, murderMysteryStatsSchema, pitStats, skywarsStatsSchema, tntGamesStatsSchema, uhcSchema } from "./stats" export const playerSchema = z.looseObject({ player: z.looseObject({ displayname: z.string(), uuid: z.string(), newPackageRank: z.string().optional(), monthlyPackageRank: z.string().optional(), rankPlusColor: z.string().optional(), monthlyRankColor: z.string().optional(), networkExp: z.number().default(0), karma: z.number().default(0), achievementPoints: z.number().default(0), achievements: z.record(z.string(), z.number()).optional(), stats: z.looseObject({ Bedwars: bedwarsStatsSchema.optional(), SkyWars: skywarsStatsSchema.optional(), Duels: duelsStatsSchema.optional(), MurderMystery: murderMysteryStatsSchema.optional(), BuildBattle: buildBattleStatsSchema.optional(), UHC: uhcSchema.optional(), Pit: pitStats.optional(), TNTGames: tntGamesStatsSchema.optional(), Walls3: megawallsStats.optional() }).transform(({ Walls3, ...rest }) => { return { MegaWalls: Walls3, ...rest } }).optional(), quests: z.record( z.string(), z.looseObject({ completions: z.array( z.looseObject({ time: z.number() }) ).optional() }) ).optional(), challenges: z.looseObject({ all_time: z.record(z.string(), z.number()) }).optional(), lastClaimedReward: z.number().optional(), rewardHighScore: z.number().optional(), rewardStreak: z.number().optional(), totalRewards: z.number().optional(), giftingMeta: z.looseObject({ giftsGiven: z.number().optional(), ranksGiven: z.number().optional() }).optional(), firstLogin: z.number().optional(), lastLogin: z.number().optional(), lastLogout: z.number().optional(), socialMedia: z.looseObject({ links: z.looseObject({ DISCORD: z.string().optional(), TWITCH: z.string().transform(v => v.startsWith("https://") || v.startsWith("http://") ? v : `https://${v}`).optional(), HYPIXEL: z.string().transform(v => v.startsWith("https://") || v.startsWith("http://") ? v : `https://${v}`).optional(), TWITTER: z.string().transform(v => v.startsWith("https://") || v.startsWith("http://") ? v : `https://${v}`).optional(), YOUTUBE: z.string().transform(v => v.startsWith("https://") || v.startsWith("http://") ? v : `https://${v}`).optional() }).optional() }).optional(), rank: z.string().optional(), eulaCoins: z.boolean().optional(), prefix: z.string().transform(v => v.replaceAll(/ยง[a-z]/g, "")).optional() }) }) export type Player = z.infer export type NonNullStats = NonNullable