import { ConfigService } from '@nestjs/config';
import { Repository } from 'typeorm';
import { JwtService } from '@nestjs/jwt';
import { Strategy } from 'passport-jwt';
export declare class UserTenantMembership {
    id: string;
    email: string;
    tenantId: string;
    role: string;
    status: string;
    createdAt: Date;
}
export declare class Tenant {
    id: string;
    name: string;
    document: string;
    email: string;
    phone: string;
    municipalInscription: string;
    ibgeCode: string;
    uf: string;
    taxRegime: number;
    simpleNational: boolean;
    fiscalIncentive: boolean;
    autentiqueToken: string;
    nfseUrl: string;
    nfseCertificate: string;
    nfseCertificatePass: string;
    plan: string;
    status: string;
    createdAt: Date;
    updatedAt: Date;
}
export declare class User {
    id: string;
    tenantId: string;
    roleId: string;
    name: string;
    email: string;
    passwordHash: string;
    isOwner: boolean;
    status: string;
    createdAt: Date;
    updatedAt: Date;
}
export declare class RegisterDto {
    tenantName: string;
    tenantDocument: string;
    tenantEmail: string;
    userName: string;
    userEmail: string;
    password: string;
}
export declare class LoginDto {
    email: string;
    password: string;
}
export declare class CreateCompanyDto {
    name: string;
    document: string;
    email: string;
}
export declare class SwitchTenantDto {
    tenantId: string;
}
export declare class ChangePasswordDto {
    currentPassword: string;
    newPassword: string;
}
declare const JwtStrategy_base: new (...args: any[]) => Strategy;
export declare class JwtStrategy extends JwtStrategy_base {
    constructor(config: ConfigService);
    validate(payload: {
        sub: string;
        tenantId: string;
        email: string;
        role: string;
    }): Promise<{
        userId: string;
        tenantId: string;
        email: string;
        role: string;
    }>;
}
export declare const JwtAuthGuard: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
export declare class AuthService {
    private readonly userRepo;
    private readonly tenantRepo;
    private readonly membershipRepo;
    private readonly jwtService;
    constructor(userRepo: Repository<User>, tenantRepo: Repository<Tenant>, membershipRepo: Repository<UserTenantMembership>, jwtService: JwtService);
    register(dto: RegisterDto): Promise<{
        access_token: string;
        user: {
            id: string;
            name: string;
            email: string;
            role: string;
            tenantId: string;
        };
    }>;
    login(dto: LoginDto): Promise<{
        tenants: {
            id: string;
            name: string;
            document: string;
            plan: string;
        }[];
        access_token: string;
        user: {
            id: string;
            name: string;
            email: string;
            role: string;
            tenantId: string;
        };
    }>;
    myTenants(email: string): Promise<{
        id: string;
        name: string;
        document: string;
        plan: string;
        role: string;
    }[]>;
    switchTenant(userId: string, email: string, tenantId: string): Promise<{
        access_token: string;
        user: {
            id: string;
            name: string;
            email: string;
            role: string;
            tenantId: string;
        };
    }>;
    createCompany(userId: string, email: string, dto: CreateCompanyDto): Promise<{
        access_token: string;
        user: {
            id: string;
            name: string;
            email: string;
            role: string;
            tenantId: string;
        };
    }>;
    private generateTokens;
    me(userId: string): Promise<any>;
    changePassword(userId: string, dto: ChangePasswordDto): Promise<{
        message: string;
    }>;
}
export declare class AuthController {
    private readonly authService;
    constructor(authService: AuthService);
    register(dto: RegisterDto): Promise<{
        access_token: string;
        user: {
            id: string;
            name: string;
            email: string;
            role: string;
            tenantId: string;
        };
    }>;
    login(dto: LoginDto): Promise<{
        tenants: {
            id: string;
            name: string;
            document: string;
            plan: string;
        }[];
        access_token: string;
        user: {
            id: string;
            name: string;
            email: string;
            role: string;
            tenantId: string;
        };
    }>;
    me(req: any): Promise<any>;
    myTenants(req: any): Promise<{
        id: string;
        name: string;
        document: string;
        plan: string;
        role: string;
    }[]>;
    switchTenant(req: any, dto: SwitchTenantDto): Promise<{
        access_token: string;
        user: {
            id: string;
            name: string;
            email: string;
            role: string;
            tenantId: string;
        };
    }>;
    createCompany(req: any, dto: CreateCompanyDto): Promise<{
        access_token: string;
        user: {
            id: string;
            name: string;
            email: string;
            role: string;
            tenantId: string;
        };
    }>;
    changePassword(req: any, dto: ChangePasswordDto): Promise<{
        message: string;
    }>;
}
export declare class AuthModule {
}
export {};
