import { z } from 'zod';
import { emailSchema, passwordSchema, usernameSchema, uuidSchema } from '../validators.js';

export const createUserRequestSchema = z.object({
  username: usernameSchema,
  email: emailSchema,
  password: passwordSchema,
  roleIds: z.array(uuidSchema).min(1, 'Mindestens eine Rolle muss zugewiesen werden'),
  branchId: uuidSchema.optional(),
});

export const updateUserRequestSchema = z.object({
  email: emailSchema.optional(),
  branchId: uuidSchema.optional(),
});

export const changePasswordRequestSchema = z
  .object({
    currentPassword: z.string().min(1, 'Aktuelles Passwort ist erforderlich'),
    newPassword: passwordSchema,
    confirmPassword: z.string().min(1, 'Passwortbestätigung ist erforderlich'),
  })
  .refine((data) => data.newPassword === data.confirmPassword, {
    message: 'Passwörter stimmen nicht überein',
    path: ['confirmPassword'],
  });

export const assignRoleRequestSchema = z.object({
  roleId: uuidSchema,
});

export type CreateUserRequestInput = z.input<typeof createUserRequestSchema>;
export type CreateUserRequestOutput = z.output<typeof createUserRequestSchema>;
export type UpdateUserRequestInput = z.input<typeof updateUserRequestSchema>;
export type UpdateUserRequestOutput = z.output<typeof updateUserRequestSchema>;
export type ChangePasswordRequestInput = z.input<typeof changePasswordRequestSchema>;
export type AssignRoleRequestInput = z.input<typeof assignRoleRequestSchema>;
