// /server/data/characterAbilities.js

const GAME_CONFIG = require('../core/config'); // Путь к конфигу из server/data/ в server/core/

// Способности Игрока (Елена)
const elenaAbilities = [
    {
        id: GAME_CONFIG.ABILITY_ID_HEAL,
        name: 'Малое Исцеление',
        cost: 20,
        type: GAME_CONFIG.ACTION_TYPE_HEAL,
        power: 30,
        description: 'Восстанавливает ~30 HP'
    },
    {
        id: GAME_CONFIG.ABILITY_ID_FIREBALL,
        name: 'Огненный Шар',
        cost: 30,
        type: GAME_CONFIG.ACTION_TYPE_DAMAGE,
        power: 25,
        description: 'Наносит ~25 урона врагу'
    },
    {
        id: GAME_CONFIG.ABILITY_ID_NATURE_STRENGTH,
        name: 'Сила Природы',
        cost: 15,
        type: GAME_CONFIG.ACTION_TYPE_BUFF,
        duration: 4, // Общая длительность эффекта
        // Описание теперь может использовать configToUse (который будет GAME_CONFIG)
        descriptionFunction: (configToUse, opponentBaseStats) => `Восст. ${configToUse.NATURE_STRENGTH_MANA_REGEN} маны при след. атаке. Эффект длится ${4 - 1} хода после применения.`,
        isDelayed: true // Этот эффект применяется ПОСЛЕ следующей атаки, а не сразу
    },
    {
        id: GAME_CONFIG.ABILITY_ID_DEFENSE_AURA,
        name: 'Аура Защиты',
        cost: 15,
        type: GAME_CONFIG.ACTION_TYPE_BUFF,
        duration: 3,
        grantsBlock: true, // Дает эффект блока на время действия
        descriptionFunction: (configToUse, opponentBaseStats) => `Снижает урон на ${configToUse.BLOCK_DAMAGE_REDUCTION * 100}% (${3} хода)`
    },
    {
        id: GAME_CONFIG.ABILITY_ID_HYPNOTIC_GAZE,
        name: 'Гипнотический взгляд',
        cost: 30,
        type: GAME_CONFIG.ACTION_TYPE_DISABLE,
        effectDuration: 2, // Длительность безмолвия в ходах противника
        cooldown: 6,
        power: 5, // Урон в ход от взгляда
        description: 'Накладывает на противника полное безмолвие на 2 хода и наносит 5 урона каждый его ход. КД: 6 х.'
    },
    {
        id: GAME_CONFIG.ABILITY_ID_SEAL_OF_WEAKNESS,
        name: 'Печать Слабости',
        cost: 30,
        type: GAME_CONFIG.ACTION_TYPE_DEBUFF,
        effectDuration: 3, // Длительность дебаффа
        power: 10, // Количество ресурса противника, сжигаемое каждый ход
        cooldown: 5,
        // Описание теперь может адаптироваться к ресурсу оппонента
        descriptionFunction: (configToUse, oppStats) => `Накладывает печать, сжигающую 10 ${oppStats ? oppStats.resourceName : 'ресурса'} противника каждый его ход в течение 3 ходов. КД: 5 х.`
    }
];

// Способности Противника (Балард - AI)
const balardAbilities = [
    {
        id: GAME_CONFIG.ABILITY_ID_BALARD_HEAL,
        name: 'Покровительство Тьмы',
        cost: 20,
        type: GAME_CONFIG.ACTION_TYPE_HEAL,
        power: 25,
        successRate: 0.60, // Шанс успеха
        description: 'Исцеляет ~25 HP с 60% шансом',
        // Условие для AI: HP ниже порога
        condition: (opSt, plSt, currentGameState, configToUse) => {
            return (opSt.currentHp / opSt.maxHp) * 100 < configToUse.OPPONENT_HEAL_THRESHOLD_PERCENT;
        }
    },
    {
        id: GAME_CONFIG.ABILITY_ID_BALARD_SILENCE,
        name: 'Эхо Безмолвия',
        cost: GAME_CONFIG.BALARD_SILENCE_ABILITY_COST,
        type: GAME_CONFIG.ACTION_TYPE_DISABLE,
        descriptionFunction: (configToUse, opponentBaseStats) => `Шанс ${configToUse.SILENCE_SUCCESS_RATE * 100}% заглушить случайное заклинание Елены на ${configToUse.SILENCE_DURATION} х.`,
        condition: (opSt, plSt, currentGameState, configToUse) => {
            const hpPercent = (opSt.currentHp / opSt.maxHp) * 100;
            const isElenaAlreadySilenced = currentGameState?.player.disabledAbilities?.length > 0 ||
                currentGameState?.player.activeEffects?.some(eff => eff.id.startsWith('playerSilencedOn_')); // Проверяем и специфичное, и общее безмолвие на цели
            const isElenaFullySilenced = currentGameState?.player.activeEffects?.some(eff => eff.isFullSilence && eff.turnsLeft > 0);

            return hpPercent >= configToUse.OPPONENT_HEAL_THRESHOLD_PERCENT && !isElenaAlreadySilenced && !isElenaFullySilenced && (opSt.silenceCooldownTurns === undefined || opSt.silenceCooldownTurns <= 0);
        },
        successRateFromConfig: 'SILENCE_SUCCESS_RATE',
        durationFromConfig: 'SILENCE_DURATION',
        internalCooldownFromConfig: 'BALARD_SILENCE_INTERNAL_COOLDOWN'
    },
    {
        id: GAME_CONFIG.ABILITY_ID_BALARD_MANA_DRAIN,
        name: 'Похищение Света',
        cost: 10,
        type: GAME_CONFIG.ACTION_TYPE_DRAIN,
        powerManaDrain: 5,
        powerDamage: 5,
        powerHealthGainFactor: 1.0,
        description: `Вытягивает 5 Маны у Елены, наносит 5 урона и восстанавливает себе здоровье (100% от украденного).`,
        condition: (opSt, plSt, currentGameState, configToUse) => {
            const playerManaPercent = (plSt.currentResource / plSt.maxResource) * 100;
            const playerHasHighMana = playerManaPercent > (configToUse.BALARD_MANA_DRAIN_HIGH_MANA_THRESHOLD || 60);
            return playerHasHighMana && (opSt.manaDrainCooldownTurns === undefined || opSt.manaDrainCooldownTurns <= 0);
        },
        internalCooldownValue: 3
    }
];

// Способности Альмагест (PvP - зеркало Елены)
const almagestAbilities = [
    {
        id: GAME_CONFIG.ABILITY_ID_ALMAGEST_HEAL,
        name: 'Темное Восстановление',
        cost: 20,
        type: GAME_CONFIG.ACTION_TYPE_HEAL,
        power: 30,
        description: 'Поглощает жизненные тени, восстанавливая ~30 HP'
    },
    {
        id: GAME_CONFIG.ABILITY_ID_ALMAGEST_DAMAGE,
        name: 'Теневой Сгусток',
        cost: 30,
        type: GAME_CONFIG.ACTION_TYPE_DAMAGE,
        power: 25,
        description: 'Запускает сгусток чистой тьмы, нанося ~25 урона врагу'
    },
    {
        id: GAME_CONFIG.ABILITY_ID_ALMAGEST_BUFF_ATTACK,
        name: 'Усиление Тьмой',
        cost: 15,
        type: GAME_CONFIG.ACTION_TYPE_BUFF,
        duration: 4,
        descriptionFunction: (configToUse, opponentBaseStats) => `Восст. ${configToUse.NATURE_STRENGTH_MANA_REGEN} Темной Энергии при след. атаке. Эффект длится ${4 - 1} хода после применения.`,
        isDelayed: true
    },
    {
        id: GAME_CONFIG.ABILITY_ID_ALMAGEST_BUFF_DEFENSE,
        name: 'Щит Пустоты',
        cost: 15,
        type: GAME_CONFIG.ACTION_TYPE_BUFF,
        duration: 3,
        grantsBlock: true,
        descriptionFunction: (configToUse, opponentBaseStats) => `Создает щит, снижающий урон на ${configToUse.BLOCK_DAMAGE_REDUCTION * 100}% (${3} хода)`
    },
    {
        id: GAME_CONFIG.ABILITY_ID_ALMAGEST_DISABLE,
        name: 'Раскол Разума',
        cost: 30,
        type: GAME_CONFIG.ACTION_TYPE_DISABLE,
        effectDuration: 2,
        cooldown: 6,
        power: 5,
        description: 'Вторгается в разум противника, накладывая полное безмолвие на 2 хода и нанося 5 урона каждый его ход. КД: 6 х.'
    },
    {
        id: GAME_CONFIG.ABILITY_ID_ALMAGEST_DEBUFF,
        name: 'Проклятие Увядания',
        cost: 30,
        type: GAME_CONFIG.ACTION_TYPE_DEBUFF,
        effectDuration: 3,
        power: 10,
        cooldown: 5,
        descriptionFunction: (configToUse, oppStats) => `Накладывает проклятие, истощающее 10 ${oppStats ? oppStats.resourceName : 'ресурса'} противника каждый его ход в течение 3 ходов. КД: 5 х.`
    }
];

module.exports = {
    elenaAbilities,
    balardAbilities,
    almagestAbilities
};