import { HttpStatus } from '@nestjs/common';
import { PermissionUserContext } from '../../common/access-control/permission-context.types';
import { PermissionResolverService } from '../../common/access-control/permission-resolver.service';
import { DatabaseService } from '../../config';
import { defaultPaginationDto } from '../shared/shared.dto';
import { createDepartmentDto, updateDepartmentDto } from './departments.dto';
export declare class DepartmentsService {
    private readonly db;
    private readonly permissionResolver;
    constructor(db: DatabaseService, permissionResolver: PermissionResolverService);
    private assertGeneralAccess;
    createDepartment(data: createDepartmentDto, owner_id: string, ctx: PermissionUserContext): Promise<{
        data: {
            id?: string;
            name?: string;
            department_code?: string;
            description?: string;
            department_head_id?: string;
            department_head?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            };
            members?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            }[];
            members_count?: number;
            status?: "active" | "inactive" | "deleted";
            created_at?: string;
            updated_at?: string;
        };
        message: string;
        status: HttpStatus;
        details: any;
    }>;
    getDepartments(owner_id: string, ctx: PermissionUserContext): Promise<{
        data: {
            id?: string;
            name?: string;
            department_code?: string;
            description?: string;
            department_head_id?: string;
            department_head?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            };
            members?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            }[];
            members_count?: number;
            status?: "active" | "inactive" | "deleted";
            created_at?: string;
            updated_at?: string;
        }[];
        message: string;
        status: HttpStatus;
        details: any;
    }>;
    getFilteredDepartments(owner_id: string, query: defaultPaginationDto, ctx: PermissionUserContext): Promise<{
        data: {
            id?: string;
            name?: string;
            department_code?: string;
            description?: string;
            department_head_id?: string;
            department_head?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            };
            members?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            }[];
            members_count?: number;
            status?: "active" | "inactive" | "deleted";
            created_at?: string;
            updated_at?: string;
        }[];
        message: string;
        status: HttpStatus;
        details: {
            pagination: {
                total_items: any;
                total_pages: number;
                current_page: number;
                items_per_page: number;
                has_next_page: boolean;
                has_previous_page: boolean;
                next_page: number;
                previous_page: number;
            };
        };
    }>;
    getDepartmentById(id: string, owner_id: string, ctx: PermissionUserContext): Promise<{
        data: {
            id?: string;
            name?: string;
            department_code?: string;
            description?: string;
            department_head_id?: string;
            department_head?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            };
            members?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            }[];
            members_count?: number;
            status?: "active" | "inactive" | "deleted";
            created_at?: string;
            updated_at?: string;
        };
        message: string;
        status: HttpStatus;
        details: any;
    }>;
    updateDepartment(id: string, data: updateDepartmentDto, owner_id: string, ctx: PermissionUserContext): Promise<{
        data: {
            id?: string;
            name?: string;
            department_code?: string;
            description?: string;
            department_head_id?: string;
            department_head?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            };
            members?: {
                id?: string;
                email?: string;
                employee_id?: string;
                image?: any;
                nickname?: string;
                first_name?: string;
                last_name?: string;
                role?: "owner" | "admin" | "member";
                status?: "active" | "deleted" | "deactivated" | "terminated" | "deceased" | "resigned";
                phone?: string;
                work_phone?: string;
                created_at?: string;
                updated_at?: string;
            }[];
            members_count?: number;
            status?: "active" | "inactive" | "deleted";
            created_at?: string;
            updated_at?: string;
        };
        message: string;
        status: HttpStatus;
        details: any;
    }>;
    deleteDepartment(id: string, owner_id: string, ctx: PermissionUserContext): Promise<{
        data: any;
        message: string;
        status: HttpStatus;
        details: {
            usedByMembers: any;
        };
    }>;
}
