import { Injectable } from '@nestjs/common';
import type { ActorContext } from '../common/actor-context.js';
import { UsersService } from '../users/users.service.js';
import { LoginDto } from '../users/dto/login.dto.js';
import { CreateSystemAdminDto } from './dto/create-system-admin.dto.js';
import { MiniappPhoneLoginConfirmDto } from './dto/miniapp-phone-login-confirm.dto.js';
import { MiniappPhoneLoginDto } from './dto/miniapp-phone-login.dto.js';
import { PasswordLoginConfirmDto } from './dto/password-login-confirm.dto.js';
import { MiniAppAuthService } from './miniapp-auth/miniapp-auth.service.js';

/**
 * 认证服务：将控制层输入转发到用户域能力，避免控制器直接操作用户仓储。
 */
@Injectable()
export class AuthService {
  constructor(
    private readonly usersService: UsersService,
    private readonly miniAppAuthService: MiniAppAuthService,
  ) {}

  /**
   * 系统管理员创建能力委托给用户服务。
   */
  createSystemAdmin(dto: CreateSystemAdminDto) {
    return this.usersService.createSystemAdmin(dto);
  }

  /**
   * 院内账号密码登录。
   */
  login(dto: LoginDto) {
    return this.usersService.login(dto);
  }

  /**
   * 院内账号密码多账号确认登录。
   */
  confirmLogin(dto: PasswordLoginConfirmDto) {
    return this.usersService.confirmLogin(dto);
  }

  /**
   * B 端小程序手机号登录。
   */
  miniAppBLogin(dto: MiniappPhoneLoginDto) {
    return this.miniAppAuthService.loginForB(dto);
  }

  /**
   * B 端小程序多账号确认登录。
   */
  miniAppBConfirmLogin(dto: MiniappPhoneLoginConfirmDto) {
    return this.miniAppAuthService.confirmLoginForB(dto);
  }

  /**
   * C 端小程序手机号登录。
   */
  miniAppCLogin(dto: MiniappPhoneLoginDto) {
    return this.miniAppAuthService.loginForC(dto);
  }

  /**
   * 读取当前登录用户详情。
   */
  me(actor: ActorContext) {
    return this.usersService.me(actor);
  }
}
