import { MagicLinkPurpose } from '@prisma/client';
import { AuthService } from './auth.service';
import { LoginDto } from './dto/login.dto';
import { RegisterDto } from './dto/register.dto';
import { RefreshTokenDto } from './dto/refresh-token.dto';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
declare class MfaCodeDto {
    code: string;
}
declare class UpdateProfileDto {
    firstName?: string;
    lastName?: string;
    phone?: string;
}
declare class ChangePasswordDto {
    currentPassword: string;
    newPassword: string;
}
declare class MagicLinkRequestDto {
    email: string;
    purpose?: MagicLinkPurpose;
}
declare class MagicLinkVerifyDto {
    token: string;
}
export declare class AuthController {
    private readonly authService;
    constructor(authService: AuthService);
    register(dto: RegisterDto): Promise<{
        accessToken: string;
        refreshToken: string;
        tokenType: string;
        user: {
            id: string;
            email: string;
            roles: {
                code: import(".prisma/client").$Enums.RoleCode;
                tenantId: string | null;
                scopeComplexId: string | null;
            }[];
        };
    }>;
    login(dto: LoginDto): Promise<{
        accessToken: string;
        refreshToken: string;
        tokenType: string;
        user: {
            id: string;
            email: string;
            roles: {
                code: import(".prisma/client").$Enums.RoleCode;
                tenantId: string | null;
                scopeComplexId: string | null;
            }[];
        };
    } | {
        mfaRequired: boolean;
        userId: string;
    }>;
    refresh(dto: RefreshTokenDto): Promise<{
        accessToken: string;
        refreshToken: string;
        tokenType: string;
        user: {
            id: string;
            email: string;
            roles: {
                code: import(".prisma/client").$Enums.RoleCode;
                tenantId: string | null;
                scopeComplexId: string | null;
            }[];
        };
    }>;
    logout(user: AuthenticatedUser, dto: RefreshTokenDto): Promise<{
        success: boolean;
    }>;
    me(user: AuthenticatedUser): Promise<{
        roles: {
            code: import(".prisma/client").$Enums.RoleCode;
            label: string;
            tenantId: string | null;
            tenant: {
                id: string;
                companyName: string;
            } | null;
            scopeComplexId: string | null;
        }[];
        id: string;
        createdAt: Date;
        updatedAt: Date;
        status: import(".prisma/client").$Enums.UserStatus;
        email: string;
        phone: string | null;
        firstName: string | null;
        lastName: string | null;
        language: string;
        mfaEnabled: boolean;
        lastLoginAt: Date | null;
    }>;
    updateProfile(user: AuthenticatedUser, dto: UpdateProfileDto): Promise<{
        firstName: string | null;
        lastName: string | null;
        phone: string | null;
    }>;
    changePassword(user: AuthenticatedUser, dto: ChangePasswordDto): Promise<{
        success: boolean;
    }>;
    mfaEnroll(user: AuthenticatedUser): Promise<{
        secret: string;
        otpauthUrl: string | undefined;
    }>;
    mfaActivate(user: AuthenticatedUser, dto: MfaCodeDto): Promise<{
        enabled: boolean;
    }>;
    mfaDisable(user: AuthenticatedUser, dto: MfaCodeDto): Promise<{
        enabled: boolean;
    }>;
    requestMagicLink(dto: MagicLinkRequestDto): Promise<{
        devUrl?: string | undefined;
        sent: boolean;
    }>;
    verifyMagicLink(dto: MagicLinkVerifyDto, ip: string): Promise<{
        accessToken: string;
        refreshToken: string;
        tokenType: string;
        user: {
            id: string;
            email: string;
            roles: {
                code: import(".prisma/client").$Enums.RoleCode;
                tenantId: string | null;
                scopeComplexId: string | null;
            }[];
        };
    }>;
}
export {};
