// Generated by ts-to-zod
import { z } from "zod";

const privacySettingInfoSchema = z.object({
    displayCollection: z.boolean(),
    displayRecord: z.boolean(),
    displayRecordTeam: z.boolean(),
    displayOnlineStatus: z.boolean(),
    displayDiary: z.boolean()
});

const recordInfoSchema = z.object({
    achievementCount: z.number(),
    bookCount: z.number(),
    avatarCount: z.number(),
    equipmentCount: z.number(),
    musicCount: z.number(),
    relicCount: z.number(),
    challengeInfo: z.unknown(),
    maxRogueChallengeScore: z.number()
});

const subAffixSchema = z.object({
    affixId: z.number(),
    cnt: z.number(),
    step: z.number().optional()
});

const flatPropSchema = z.object({
    type: z.string(),
    value: z.number()
});

const relicFlatSchema = z.object({
    props: z.array(flatPropSchema),
    setName: z.union([z.string(), z.number()]),
    setID: z.number()
});

const relicSchema = z.object({
    mainAffixId: z.number(),
    subAffixList: z.array(subAffixSchema),
    tid: z.number(),
    type: z.number(),
    level: z.number(),
    _flat: relicFlatSchema
});

const skillTreeSchema = z.object({
    pointId: z.number(),
    level: z.number()
});

const equipmentFlatSchema = z.object({
    props: z.array(flatPropSchema),
    name: z.union([z.string(), z.number()])
});

const equipmentSchema = z.object({
    rank: z.number(),
    tid: z.number(),
    promotion: z.number(),
    level: z.number(),
    _flat: equipmentFlatSchema
});

export const avatarEnkaDetailSchema = z.object({
    relicList: z.array(relicSchema),
    level: z.number(),
    promotion: z.number(),
    rank: z.number().optional(),
    skillTreeList: z.array(skillTreeSchema),
    equipment: equipmentSchema,
    avatarId: z.number(),
    _assist: z.boolean().optional()
});

const detailInfoSchema = z.object({
    worldLevel: z.number(),
    privacySettingInfo: privacySettingInfoSchema,
    headIcon: z.number(),
    signature: z.string(),
    avatarDetailList: z.array(avatarEnkaDetailSchema),
    platform: z.string(),
    recordInfo: recordInfoSchema,
    uid: z.number(),
    level: z.number(),
    nickname: z.string(),
    isDisplayAvatar: z.boolean(),
    friendCount: z.number(),
    personalCardId: z.number()
});

export const enkaResponseSchema = z.object({
    detailInfo: detailInfoSchema,
    ttl: z.number(),
    uid: z.string()
});
