import { TaskHandlingService } from './task-handling-service';
import { TaskContentService } from '../../task-content/services/task-content.service';
import { TaskDataService } from './task-data.service';
import { AssignTaskService } from './assign-task.service';
import { CancelTaskService } from './cancel-task.service';
import { FinishPolicyService } from './finish-policy.service';
import { TaskOperations } from '../interfaces/task-operations';
import { CallChainService } from '../../utility/call-chain/call-chain.service';
import { Subject } from 'rxjs';
import { UserComparatorService } from '../../user/services/user-comparator.service';
import { AfterAction } from '../../utility/call-chain/after-action';
import { PermissionService } from '../../authorization/permission/permission.service';
import { UserService } from "../../user/services/user.service";
import * as i0 from "@angular/core";
/**
 * Handles the sequence of actions that are performed when a task is being assigned, based on the task's configuration.
 */
export declare class AssignPolicyService extends TaskHandlingService {
    protected _taskDataService: TaskDataService;
    protected _assignTaskService: AssignTaskService;
    protected _cancelTaskService: CancelTaskService;
    protected _finishPolicyService: FinishPolicyService;
    protected _callchain: CallChainService;
    protected _userComparatorService: UserComparatorService;
    protected _taskOperations: TaskOperations;
    protected _permissionService: PermissionService;
    protected _userService: UserService;
    private _isForced;
    constructor(_taskDataService: TaskDataService, _assignTaskService: AssignTaskService, _cancelTaskService: CancelTaskService, _finishPolicyService: FinishPolicyService, _callchain: CallChainService, _userComparatorService: UserComparatorService, _taskOperations: TaskOperations, taskContentService: TaskContentService, _permissionService: PermissionService, _userService: UserService);
    get forced(): boolean;
    set forced(bool: boolean);
    /**
     * Performs the actions that correspond to the policy defined by the Task on it's assignment.
     * @param taskOpened whether the Task was 'opened' (eg. task panel is expanding) or 'closed' (eg. task panel is collapsing)
     * @param afterAction the action that should be performed when the assign policy (and all following policies) finishes
     */
    performAssignPolicy(taskOpened: boolean, afterAction?: AfterAction): void;
    private performAssign;
    /**
     * Performs the actions that correspond to the [Auto Assign Policy]{@link AssignPolicy#auto}.
     * @param taskOpened whether the Task was 'opened' (eg. task panel is expanding) or 'closed' (eg. task panel is collapsing)
     * @param afterAction the action that should be performed when the assign policy (and all following policies) finishes
     */
    protected autoAssignPolicy(taskOpened: boolean, afterAction: AfterAction): void;
    /**
     * Performs the actions that correspond to the [Auto Assign Policy]{@link AssignPolicy#auto}
     * when a task is 'opening' (eg. task panel is expanding).
     *
     * Assigns the task, reloads the current task page, loads task data and performs the finish policy.
     *
     * See [finish policy]{@link FinishPolicyService#performFinishPolicy} for more information.
     *
     * @param afterAction the action that should be performed when the assign policy (and all following policies) finishes
     */
    protected autoAssignOpenedPolicy(afterAction: AfterAction): void;
    /**
     * Reloads the current page of tasks if the preceding assign operation succeeded. Then initializes the task's data fields.
     * @param assignSuccess whether the preceding assign succeeded or not
     * @param afterAction the action that should be performed when the assign policy (and all following policies) finishes
     */
    protected afterAssignOpenPolicy(assignSuccess: boolean, afterAction: AfterAction): void;
    /**
     * Requests a reload of the task and then requests the task to be closed.
     *
     * @param afterAction the action that should be performed when the assign policy (and all following policies) finishes
     */
    protected autoAssignClosedPolicy(afterAction: Subject<boolean>): void;
    /**
     * Performs the actions that correspond to the [Manual Assign Policy]{@link AssignPolicy#manual}.
     * @param taskOpened whether the Task was 'opened' (eg. task panel is expanding) or 'closed' (eg. task panel is collapsing)
     * @param afterAction the action that should be performed when the assign policy (and all following policies) finishes
     */
    protected manualAssignPolicy(taskOpened: boolean, afterAction: AfterAction): void;
    /**
     * Performs the actions that correspond to the [Manual Assign Policy]{@link AssignPolicy#manual}
     * when a task is 'opening' (eg. task panel is expanding).
     *
     * Loads task data and performs the [finish policy]{@link FinishPolicyService#performFinishPolicy}.
     *
     * See [finish policy]{@link FinishPolicyService#performFinishPolicy} for more information.
     *
     * @param afterAction the action that should be performed when the assign policy (and all following policies) finishes
     */
    protected manualAssignOpenedPolicy(afterAction: AfterAction): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AssignPolicyService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<AssignPolicyService>;
}
