import { AllCardsService } from '@firestone-hs/reference-data';
import { BgsPlayerEntity } from '../bgs-player-entity';
import { BoardEntity } from '../board-entity';
import { FullGameState } from './internal-game-state';
export declare const simulateAttack: (attackingBoard: BoardEntity[], attackingBoardHero: BgsPlayerEntity, defendingBoard: BoardEntity[], defendingBoardHero: BgsPlayerEntity, gameState: FullGameState, options?: {
    skipSummonWhenSpace?: boolean;
    forceTarget?: BoardEntity;
}) => BoardEntity;
export declare const doFullAttack: (attackingEntity: BoardEntity, attackingBoard: BoardEntity[], attackingBoardHero: BgsPlayerEntity, defendingEntity: BoardEntity, defendingBoard: BoardEntity[], defendingBoardHero: BgsPlayerEntity, gameState: FullGameState, options?: {
    skipSummonWhenSpace?: boolean;
}) => void;
export declare const findNearestEnemies: (attackingBoard: BoardEntity[], entity: BoardEntity, entityIndexFromRight: number, defendingBoard: BoardEntity[], numberOfTargets: number, allCards: AllCardsService) => BoardEntity[];
export declare const getNeighbours: (board: BoardEntity[], entity: BoardEntity, deadEntityIndexFromRight?: number, alwaysIncludeBoth?: boolean) => readonly BoardEntity[];
export declare const getLeftNeighbour: (board: BoardEntity[], entity: BoardEntity, deadEntityIndexFromRight?: number) => BoardEntity;
export declare const dealDamageToRandomEnemy: (boardToBeDamaged: BoardEntity[], boardToBeDamagedHero: BgsPlayerEntity, damageSource: BoardEntity, damage: number, boardWithAttackOrigin: BoardEntity[], boardWithAttackOriginHero: BgsPlayerEntity, gameState: FullGameState) => void;
export declare const dealDamageToMinion: (target: BoardEntity, board: BoardEntity[], hero: BgsPlayerEntity, damageSource: BoardEntity | BgsPlayerEntity, damage: number, otherBoard: BoardEntity[], otherHero: BgsPlayerEntity, gameState: FullGameState) => number;
export declare const dealDamageToMinions: (targets: BoardEntity[], board: BoardEntity[], hero: BgsPlayerEntity, damageSource: BoardEntity | BgsPlayerEntity, damage: number, otherBoard: BoardEntity[], otherHero: BgsPlayerEntity, gameState: FullGameState) => number;
export declare const getDefendingEntity: (defendingBoard: BoardEntity[], attackingEntity: BoardEntity, ignoreTaunts?: boolean) => BoardEntity;
export declare const bumpEntities: (entity: BoardEntity, bumpInto: BoardEntity, entityBoard: BoardEntity[], entityBoardHero: BgsPlayerEntity, otherBoard: BoardEntity[], otherHero: BgsPlayerEntity, gameState: FullGameState, applyVenomous?: boolean) => number;
export declare const processMinionDeath: (board1: BoardEntity[], board1Hero: BgsPlayerEntity, board2: BoardEntity[], board2Hero: BgsPlayerEntity, gameState: FullGameState, skipSummonWhenSpace?: boolean) => void;
export interface OnDeathInput {
    readonly hero: BgsPlayerEntity;
    readonly board: BoardEntity[];
    readonly gameState: FullGameState;
}
export interface OnAfterDeathInput {
    readonly hero: BgsPlayerEntity;
    readonly board: BoardEntity[];
    readonly otherHero: BgsPlayerEntity;
    readonly otherBoard: BoardEntity[];
    readonly deadEntities: BoardEntity[];
    readonly gameState: FullGameState;
}
export interface OnAfterFriendlyMinionDeathInput {
    readonly deadEntity: BoardEntity;
    readonly board: BoardEntity[];
    readonly hero: BgsPlayerEntity;
    readonly gameState: FullGameState;
}
export interface OnMinionKilledInput {
    readonly killer: BoardEntity;
    readonly killerIsAttacking: boolean;
    readonly minionKilled: BoardEntity;
    readonly attackingHero: BgsPlayerEntity;
    readonly attackingBoard: BoardEntity[];
    readonly defendingHero: BgsPlayerEntity;
    readonly defendingBoard: BoardEntity[];
    readonly defenderNeighbours: readonly BoardEntity[];
    readonly gameState: FullGameState;
    readonly playerIsFriendly: boolean;
}
