import { userService } from "./user";
import type { RegisterData, UserResponse } from "./types";

// Роль по умолчанию для новых пользователей
const DEFAULT_ROLE_NAME = "manager" as const;

/**
 * Сервис регистрации
 */
export const registerService = {
  /**
   * Регистрация нового пользователя
   * @param data - данные для регистрации
   * @param callerRole - роль вызывающего пользователя (если авторизован)
   */
  async register(
    data: RegisterData,
    callerRole?: string
  ): Promise<UserResponse | null> {
    // Проверить, существует ли пользователь
    const existingUser = await userService.findByEmail(data.email);

    if (existingUser) {
      return null;
    }

    // Захешировать пароль
    const hashedPassword = await userService.hashPassword(data.password);

    // Определить роль для нового пользователя
    // Только администраторы могут указывать кастомную роль
    const role =
      callerRole === "admin" && data.role ? data.role : DEFAULT_ROLE_NAME;

    // Создать пользователя
    const newUser = await userService.create({
      email: data.email,
      password: hashedPassword,
      fullName: data.fullName,
      role,
    });

    return userService.sanitize(newUser);
  },
};
