import { userService } from "./user";
import { sessionService } from "./session";
import type { LoginResult, SessionMetadata } from "./types";

/**
 * Сервис авторизации
 */
export const loginService = {
  /**
   * Авторизация пользователя
   */
  async login(
    email: string,
    password: string,
    metadata: SessionMetadata
  ): Promise<LoginResult | null> {
    // Найти пользователя по email
    const user = await userService.findByEmail(email);

    if (!user) {
      return null;
    }

    // Проверить пароль
    const isPasswordValid = await userService.verifyPassword(
      password,
      user.password
    );

    if (!isPasswordValid) {
      return null;
    }

    // Создать новую сессию
    const { sessionId, accessToken } = await sessionService.create(
      user.id,
      metadata
    );

    // Получить пользователя с полными данными (филиал и компания)
    const userWithRelations = await userService.findByIdWithRelations(user.id);

    // Вычислить дату истечения токена
    const expiresAt = new Date();
    expiresAt.setDate(expiresAt.getDate() + 7);

    return {
      user: userWithRelations
        ? userService.sanitizeWithRelations(userWithRelations)
        : userService.sanitize(user),
      session: {
        id: sessionId,
        token: accessToken,
        expiresAt: expiresAt.toISOString(),
      },
    };
  },
};
