import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { AddUserDepartmentDto, UpdateUserDepartmentDto } from './dto';
export declare class UserDepartmentsService {
    private prisma;
    constructor(prisma: PrismaService);
    getUserDepartments(userId: string): Promise<({
        department: {
            code: string;
            id: string;
            name: string;
        };
        position: {
            id: string;
            name: string;
            level: number;
        } | null;
        manager: {
            displayName: string;
            id: string;
            email: string;
        } | null;
    } & {
        title: string | null;
        id: string;
        createdAt: Date;
        userId: string;
        updatedAt: Date;
        organizationId: string;
        departmentId: string;
        positionId: string | null;
        managerId: string | null;
        isPrimary: boolean;
        joinedAt: Date;
        leftAt: Date | null;
    })[]>;
    addUserDepartment(userId: string, dto: AddUserDepartmentDto): Promise<{
        department: {
            code: string;
            id: string;
            name: string;
        };
        position: {
            id: string;
            name: string;
            level: number;
        } | null;
        manager: {
            displayName: string;
            id: string;
            email: string;
        } | null;
    } & {
        title: string | null;
        id: string;
        createdAt: Date;
        userId: string;
        updatedAt: Date;
        organizationId: string;
        departmentId: string;
        positionId: string | null;
        managerId: string | null;
        isPrimary: boolean;
        joinedAt: Date;
        leftAt: Date | null;
    }>;
    updateUserDepartment(userId: string, departmentId: string, dto: UpdateUserDepartmentDto): Promise<{
        department: {
            code: string;
            id: string;
            name: string;
        };
        position: {
            id: string;
            name: string;
            level: number;
        } | null;
        manager: {
            displayName: string;
            id: string;
            email: string;
        } | null;
    } & {
        title: string | null;
        id: string;
        createdAt: Date;
        userId: string;
        updatedAt: Date;
        organizationId: string;
        departmentId: string;
        positionId: string | null;
        managerId: string | null;
        isPrimary: boolean;
        joinedAt: Date;
        leftAt: Date | null;
    }>;
    setPrimaryDepartment(userId: string, departmentId: string): Promise<{
        userId: string;
        departmentId: string;
        message: string;
    }>;
    removeUserDepartment(userId: string, departmentId: string): Promise<{
        message: string;
        warning: string | undefined;
    }>;
    private validateManager;
    private detectManagerLoop;
    getUserPrimaryDepartment(userId: string): Promise<({
        department: {
            code: string;
            id: string;
            createdAt: Date;
            tenantId: string | null;
            name: string;
            metadata: import("@prisma/client/runtime/library").JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            organizationId: string;
            parentId: string | null;
            headId: string | null;
            order: number;
        };
        position: {
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            level: number;
        } | null;
        manager: {
            displayName: string;
            id: string;
            email: string;
        } | null;
    } & {
        title: string | null;
        id: string;
        createdAt: Date;
        userId: string;
        updatedAt: Date;
        organizationId: string;
        departmentId: string;
        positionId: string | null;
        managerId: string | null;
        isPrimary: boolean;
        joinedAt: Date;
        leftAt: Date | null;
    }) | null>;
}
