// Stats de base

import { ResourcesType } from "./character.types";

// ====================================
// Base Stats Types
// ====================================
export interface Stats {
    strength: number;    // Physical power and health
    agility: number;     // Speed and precision
    intelligence: number;// Magic power and mana
    vitality: number;    // Health and defense
    spirit: number;      // Healing and resistance
}

// ====================================
// Defense Types
// ====================================
export interface DefenseStats {
    maxHealth: number;
    currentHealth: number;
    healthRegen: number;
    physicalReduction: number;  // Physical damage reduction
    magicResistance: number;    // Magic damage resistance
    statusResistance: number;   // Status effect resistance
}

// ====================================
// Resource Types
// ====================================
export interface ResourceStats {
    type: ResourcesType;
    maxResource: number;
    currentResource: number;
    resourceRegen: number;
    gainOnDamageTaken?: number; // Rage generation from damage taken
    gainOnDamageDealt?: number; // Rage generation from damage dealt
    decayRate?: number;         // Resource loss per second out of combat
}

// ====================================
// Damage Types
// ====================================
export enum DamageType {
    PHYSICAL_MELEE = 'physical_melee',
    PHYSICAL_RANGED = 'physical_ranged',
    MAGICAL = 'magical',
    HEALING = 'healing'
}

// ====================================
// Combat Stats Types
// ====================================
export interface PhysicalCombatStats {
    accuracy: number;           // Hit chance
    dodge: number;             // Dodge chance
    meleeAttackPower: number;  // Melee attack power
    rangedAttackPower: number; // Ranged attack power
    physicalCritChance: number;// Physical critical hit chance
    critMultiplier: number;    // Critical hit multiplier
}

export interface MagicalCombatStats {
    magicPower: number;         // Magic damage power
    magicCritChance: number;    // Magic critical hit chance
    magicCritMultiplier: number;// Magic critical hit multiplier
}

export interface HealingStats {
    healingPower: number;      // Healing output power
    healingReceived: number;   // Healing received effectiveness
}

export interface CombatStats extends PhysicalCombatStats, MagicalCombatStats, HealingStats {}

// ====================================
// Full Stats
// ====================================
export interface ExtendedStats extends Stats, DefenseStats, ResourceStats, CombatStats {}

// ====================================
// Stat Modifiers
// ====================================
export interface ClassStatModifiers {
    baseStats: Partial<Stats>;
    defenseMultiplier: number;
    resourceMultiplier: number;
    combatMultipliers: {
        physical?: number;
        magical?: number;
        healing?: number;
    };
}

// ====================================
// Stat Calculation Interface
// ====================================
export interface StatCalculator {
    calculateDefenseStats(base: Stats, modifiers: ClassStatModifiers): DefenseStats;
    calculateResourceStats(base: Stats, modifiers: ClassStatModifiers, type: ResourcesType): ResourceStats;
    calculateCombatStats(base: Stats, modifiers: ClassStatModifiers): CombatStats;
    calculateDamage(attacker: ExtendedStats, defender: ExtendedStats, damageType: DamageType, multiplier: number): number;
    calculateHealing(healer: ExtendedStats, target: ExtendedStats, multiplier: number): number;
} 