// src/server/features/auth/auth.schema.ts
// Zod schemas for authentication validation

import { z } from 'zod';

// Login schema
export const loginSchema = z.object({
  username: z.string().min(1, 'Username is required'),
  password: z.string().min(1, 'Password is required'),
});

export type LoginInput = z.infer<typeof loginSchema>;

// Register schema
export const registerSchema = z.object({
  username: z.string().min(3, 'Username must be at least 3 characters'),
  password: z.string().min(6, 'Password must be at least 6 characters'),
  email: z.string().email('Invalid email format'),
  name: z.string().min(1, 'Name is required'),
  position: z.string().optional().default('Staff'),
  phone: z.string().optional(),
});

export type RegisterInput = z.infer<typeof registerSchema>;

// Response schemas
export const userResponseSchema = z.object({
  id: z.string(),
  username: z.string(),
  email: z.string().nullable(),
  role: z.string(),
  employeeId: z.string(), // Maps to id for frontend compatibility
});

export const loginResponseSchema = z.object({
  success: z.boolean(),
  data: z.object({
    user: userResponseSchema,
  }),
});

export const registerResponseSchema = z.object({
  success: z.boolean(),
  data: z.object({
    user: userResponseSchema,
  }),
});

export const errorResponseSchema = z.object({
  success: z.boolean(),
  error: z.object({
    message: z.string(),
    code: z.string(),
  }),
});

export const logoutResponseSchema = z.object({
  success: z.boolean(),
});
