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

export const subAffixSchema = z.object({
    sub_affix_id: z.number(),
    count: z.number(),
    step: z.number()
});

export const relicJsonSchema = z.object({
    level: z.number(),
    relic_id: z.number(),
    relic_set_id: z.number(),
    main_affix_id: z.number(),
    sub_affixes: z.array(subAffixSchema),
    internal_uid: z.number(),
    equip_avatar: z.number()
});

export const lightconeJsonSchema = z.object({
    level: z.number(),
    item_id: z.number(),
    equip_avatar: z.number(),
    rank: z.number(),
    promotion: z.number(),
    internal_uid: z.number()
});

export const avatarDataSchema = z.object({
    rank: z.number(),
    skills: z.record(z.string(), z.number()),
    skills_by_anchor_type: z.record(z.string(), z.number()).optional()
});

export const avatarJsonSchema = z.object({
    owner_uid: z.number().optional(),
    avatar_id: z.number(),
    data: avatarDataSchema,
    level: z.number(),
    promotion: z.number(),
    techniques: z.array(z.number()),
    sp_value: z.number(),
    sp_max: z.number(),
    enhanced_id: z.number().optional()
});

export const monsterJsonSchema = z.object({
    monster_id: z.number(),
    level: z.number(),
    amount: z.number()
});

export const dynamicKeyJsonSchema = z.object({
    key: z.string(),
    value: z.number()
});

export const battleBuffJsonSchema = z.object({
    level: z.number(),
    id: z.number(),
    dynamic_key: dynamicKeyJsonSchema.optional()
});

export const battleConfigJsonSchema = z.object({
    battle_type: z.string(),
    blessings: z.array(battleBuffJsonSchema),
    custom_stats: z.array(subAffixSchema),
    cycle_count: z.number(),
    stage_id: z.number(),
    path_resonance_id: z.number(),
    monsters: z.array(z.array(monsterJsonSchema))
});

const loadoutJsonSchema = z.object({
    name: z.string(),
    avatar_id: z.number(),
    relic_list: z.array(z.string())
});

export const freeSrJsonSchema = z.object({
    key: z.string().optional(),
    lightcones: z.array(lightconeJsonSchema),
    relics: z.array(relicJsonSchema),
    avatars: z.record(z.string(), avatarJsonSchema),
    battle_config: battleConfigJsonSchema,
    loadout: z.array(loadoutJsonSchema).optional()
});

const extraDataSchema = z.any();

export const psResponseSchema = z.object({
    status: z.number(),
    message: z.string(),
    extra_data: extraDataSchema.optional()
});
