import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { Evaluation360Status, EvaluationTaskStatus, RelationType, Prisma } from '@prisma/client';
export declare class Evaluation360Service {
    private readonly prisma;
    constructor(prisma: PrismaService);
    getCycleEndDate(cycleId: string): Promise<Date | null>;
    canView360(employeeId: string, userId: string, roles: string[], permissions: string[]): boolean;
    private readonly VALID_TRANSITIONS;
    private getTemplateDimensions;
    create(data: {
        cycleId: string;
        targetId: string;
        templateId?: string;
        deadline: Date;
        minEvaluators?: number;
        createdBy: string;
        evaluators?: {
            evaluatorId: string;
            relationType: RelationType;
            isAnonymous?: boolean;
        }[];
    }): Promise<{
        template: {
            id: string;
            createdAt: Date;
            name: string;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            organizationId: string | null;
            isActive: boolean;
            scope: Prisma.JsonValue | null;
            createdBy: string;
            isDefault: boolean;
            cycleId: string | null;
            dimensions: Prisma.JsonValue;
            relationshipTypes: Prisma.JsonValue;
        } | null;
        tasks: {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.EvaluationTaskStatus;
            deletedAt: Date | null;
            submittedAt: Date | null;
            evaluationId: string;
            evaluatorId: string;
            relationType: import("@prisma/client").$Enums.RelationType;
            isAnonymous: boolean;
        }[];
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        updatedAt: Date;
        deletedAt: Date | null;
        targetId: string;
        templateId: string | null;
        createdBy: string;
        cycleId: string;
        deadline: Date;
        minEvaluators: number | null;
    }>;
    findAll(query: {
        cycleId?: string;
        status?: Evaluation360Status;
        page?: number;
        pageSize?: number;
    }): Promise<{
        items: {
            evaluateeId: string;
            taskStats: {
                total: number;
                pending: number;
                submitted: number;
            };
            template: {
                id: string;
                name: string;
            } | null;
            tasks: {
                id: string;
                status: import("@prisma/client").$Enums.EvaluationTaskStatus;
            }[];
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.Evaluation360Status;
            updatedAt: Date;
            deletedAt: Date | null;
            targetId: string;
            templateId: string | null;
            createdBy: string;
            cycleId: string;
            deadline: Date;
            minEvaluators: number | null;
        }[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    findById(id: string): Promise<{
        evaluateeId: string;
        template: {
            id: string;
            createdAt: Date;
            name: string;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            organizationId: string | null;
            isActive: boolean;
            scope: Prisma.JsonValue | null;
            createdBy: string;
            isDefault: boolean;
            cycleId: string | null;
            dimensions: Prisma.JsonValue;
            relationshipTypes: Prisma.JsonValue;
        } | null;
        tasks: ({
            responses: {
                id: string;
                deletedAt: Date | null;
                taskId: string;
                comment: string | null;
                dimension: string;
                score: Prisma.Decimal;
            }[];
        } & {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.EvaluationTaskStatus;
            deletedAt: Date | null;
            submittedAt: Date | null;
            evaluationId: string;
            evaluatorId: string;
            relationType: import("@prisma/client").$Enums.RelationType;
            isAnonymous: boolean;
        })[];
        cycle: {
            id: string;
            status: import("@prisma/client").$Enums.CycleStatus;
            name: string;
        };
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        updatedAt: Date;
        deletedAt: Date | null;
        targetId: string;
        templateId: string | null;
        createdBy: string;
        cycleId: string;
        deadline: Date;
        minEvaluators: number | null;
    }>;
    update(id: string, data: {
        templateId?: string;
        deadline?: Date;
        minEvaluators?: number;
    }): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        updatedAt: Date;
        deletedAt: Date | null;
        targetId: string;
        templateId: string | null;
        createdBy: string;
        cycleId: string;
        deadline: Date;
        minEvaluators: number | null;
    }>;
    delete(id: string): Promise<{
        success: boolean;
    }>;
    start(id: string): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        updatedAt: Date;
        deletedAt: Date | null;
        targetId: string;
        templateId: string | null;
        createdBy: string;
        cycleId: string;
        deadline: Date;
        minEvaluators: number | null;
    }>;
    complete(id: string): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        updatedAt: Date;
        deletedAt: Date | null;
        targetId: string;
        templateId: string | null;
        createdBy: string;
        cycleId: string;
        deadline: Date;
        minEvaluators: number | null;
    }>;
    addEvaluators(evaluationId: string, evaluators: {
        evaluatorId: string;
        relationType: RelationType;
        isAnonymous?: boolean;
    }[]): Promise<{
        evaluateeId: string;
        template: {
            id: string;
            createdAt: Date;
            name: string;
            updatedAt: Date;
            deletedAt: Date | null;
            description: string | null;
            organizationId: string | null;
            isActive: boolean;
            scope: Prisma.JsonValue | null;
            createdBy: string;
            isDefault: boolean;
            cycleId: string | null;
            dimensions: Prisma.JsonValue;
            relationshipTypes: Prisma.JsonValue;
        } | null;
        tasks: ({
            responses: {
                id: string;
                deletedAt: Date | null;
                taskId: string;
                comment: string | null;
                dimension: string;
                score: Prisma.Decimal;
            }[];
        } & {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.EvaluationTaskStatus;
            deletedAt: Date | null;
            submittedAt: Date | null;
            evaluationId: string;
            evaluatorId: string;
            relationType: import("@prisma/client").$Enums.RelationType;
            isAnonymous: boolean;
        })[];
        cycle: {
            id: string;
            status: import("@prisma/client").$Enums.CycleStatus;
            name: string;
        };
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        updatedAt: Date;
        deletedAt: Date | null;
        targetId: string;
        templateId: string | null;
        createdBy: string;
        cycleId: string;
        deadline: Date;
        minEvaluators: number | null;
    }>;
    removeEvaluator(evaluationId: string, evaluatorId: string): Promise<{
        success: boolean;
    }>;
    findTasks(query: {
        evaluationId?: string;
        evaluatorId?: string;
        status?: EvaluationTaskStatus;
    }): Promise<({
        evaluation: {
            id: string;
            status: import("@prisma/client").$Enums.Evaluation360Status;
            targetId: string;
            deadline: Date;
        };
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.EvaluationTaskStatus;
        deletedAt: Date | null;
        submittedAt: Date | null;
        evaluationId: string;
        evaluatorId: string;
        relationType: import("@prisma/client").$Enums.RelationType;
        isAnonymous: boolean;
    })[]>;
    findMyTasks(userId: string): Promise<{
        relationship: import("@prisma/client").$Enums.RelationType;
        evaluation: {
            targetUser: {
                id: string;
                username: string;
                displayName: string;
            } | null;
            id: string;
            status: import("@prisma/client").$Enums.Evaluation360Status;
            targetId: string;
            template: {
                id: string;
                createdAt: Date;
                name: string;
                updatedAt: Date;
                deletedAt: Date | null;
                description: string | null;
                organizationId: string | null;
                isActive: boolean;
                scope: Prisma.JsonValue | null;
                createdBy: string;
                isDefault: boolean;
                cycleId: string | null;
                dimensions: Prisma.JsonValue;
                relationshipTypes: Prisma.JsonValue;
            } | null;
            deadline: Date;
        };
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.EvaluationTaskStatus;
        deletedAt: Date | null;
        submittedAt: Date | null;
        evaluationId: string;
        evaluatorId: string;
        relationType: import("@prisma/client").$Enums.RelationType;
        isAnonymous: boolean;
    }[]>;
    submitFeedback(taskId: string, responses: {
        dimension: string;
        score: number;
        comment?: string;
    }[], currentUserId: string): Promise<{
        success: boolean;
    }>;
    getResults(evaluationId: string): Promise<{
        evaluationId: string;
        targetId: string;
        overallScore: number;
        dimensionScores: {
            dimension: string;
            avgScore: number;
            responseCount: number;
        }[];
        relationBreakdown: {
            relationType: import("@prisma/client").$Enums.RelationType;
            avgScore: number;
            count: number;
        }[];
        completedTasks: number;
        totalTasks: number;
    }>;
    calculateAggregateScore(evaluationId: string): Promise<number>;
    getEmployee360Summary(cycleId: string, employeeId: string): Promise<{
        evaluationId: string;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        completedCount: number;
        totalCount: number;
        aggregateScore?: undefined;
        dimensionScores?: undefined;
        scoresByRelationship?: undefined;
    } | {
        evaluationId: string;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        completedCount: number;
        totalCount: number;
        aggregateScore: number;
        dimensionScores: {
            dimension: string;
            avgScore: number;
            count: number;
        }[];
        scoresByRelationship: {
            relationship: string;
            avgScore: number;
            count: number;
        }[];
    } | null>;
    getEmployee360Evaluation(cycleId: string, employeeId: string): Promise<{
        tasks: {
            evaluator: {
                displayName: string;
                id: string;
                username: string;
                email: string;
                avatar: string | null;
            } | null;
            responses: {
                id: string;
                deletedAt: Date | null;
                taskId: string;
                comment: string | null;
                dimension: string;
                score: Prisma.Decimal;
            }[];
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.EvaluationTaskStatus;
            deletedAt: Date | null;
            submittedAt: Date | null;
            evaluationId: string;
            evaluatorId: string;
            relationType: import("@prisma/client").$Enums.RelationType;
            isAnonymous: boolean;
        }[];
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.Evaluation360Status;
        updatedAt: Date;
        deletedAt: Date | null;
        targetId: string;
        templateId: string | null;
        createdBy: string;
        cycleId: string;
        deadline: Date;
        minEvaluators: number | null;
    } | null>;
}
