import { z } from 'zod';

export const sessionSchema = z.object({
    body: z.object({
        startTime: z.union([z.number(), z.string(), z.date()]), // Date.now or ISO string
        endTime: z.union([z.number(), z.string(), z.date()]).nullable().optional(),
        userBodyWeight: z.number().nullable().optional(),
        note: z.string().nullable().optional(),
        planId: z.string().nullable().optional(),
        planName: z.string().nullable().optional(),
        type: z.string().optional(), // Added missing field
        sets: z.array(z.object({
            exerciseId: z.string(),
            timestamp: z.union([z.number(), z.string(), z.date()]).optional(), // Added missing field
            weight: z.number().nullable().optional(),
            reps: z.number().nullable().optional(),
            distanceMeters: z.number().nullable().optional(),
            durationSeconds: z.number().nullable().optional(),
            completed: z.boolean().optional().default(true),
            side: z.string().nullable().optional(),
            height: z.number().nullable().optional(), // Added missing field
            bodyWeightPercentage: z.number().nullable().optional() // Added missing field
        }))
    })
});

export const logSetSchema = z.object({
    body: z.object({
        exerciseId: z.string(),
        weight: z.number().nullable().optional(),
        reps: z.number().nullable().optional(),
        distanceMeters: z.number().nullable().optional(),
        durationSeconds: z.number().nullable().optional(),
        height: z.number().nullable().optional(),
        bodyWeightPercentage: z.number().nullable().optional(),
        note: z.string().nullable().optional(),
        side: z.string().nullable().optional(),
    })
});

export const updateSetSchema = z.object({
    body: z.object({
        weight: z.number().nullable().optional(),
        reps: z.number().nullable().optional(),
        distanceMeters: z.number().nullable().optional(),
        durationSeconds: z.number().nullable().optional(),
        height: z.number().nullable().optional(),
        bodyWeightPercentage: z.number().nullable().optional(),
        side: z.string().nullable().optional(),
    })
});
