export class GameSettings {
    public player: PlayerSettings = new PlayerSettings();
    public upgrades: UpgradeSettings = new UpgradeSettings();
    public metaUpgrades: MetaUpgradeSettings = new MetaUpgradeSettings();
    public enemyManager: EnemyManagerSettings = new EnemyManagerSettings();
}

export class PlayerSettings {
    public defaultHP = 0;
    public requiredXP: number[] = [];
    public speed = 0;
    public regenerationDelay = 0;
    public collisionDelay = 0;
    public weapon: WeaponSettings = new WeaponSettings();
    public haloLauncher: HaloLauncherSettings = new HaloLauncherSettings();
    public horizontalLauncher: WaveLauncherSettings = new WaveLauncherSettings();
    public diagonalLauncher: WaveLauncherSettings = new WaveLauncherSettings();
}

export class WeaponSettings {
    public strikeDelay = 0;
    public damage = 0;
}

export class WaveLauncherSettings {
    public wavesToShootPerUpgrade = 0;
    public launcher = new ProjectileLauncherSettings();
}

export class HaloLauncherSettings {
    public projectilesToSpawn = 0;
    public cooldownDivisorPerUpgrade = 0;
    public launcher = new ProjectileLauncherSettings();
}

export class ProjectileLauncherSettings {
    public projectileLifetime = 0;
    public projectileSpeed = 0;
    public wavesToShoot = 0;
    public wavesDelayMs = 0;
    public cooldown = 0;
}

export class UpgradeSettings {
    public maxWeaponLengthUpgrades = 0;
    public maxWeaponDamageUpgrades = 0;
    public maxHorizontalProjectileUpgrades = 0;
    public maxDiagonalProjectileUpgrades = 0;
    public maxHaloProjectileUpgrades = 0;
    public maxRegenerationUpgrades = 0;
}

export class MetaUpgradeSettings {
    public healthPointsPerLevel = 0;
    public bonusDamagePerLevel = 0;
    public projectilePiercingPerLevel = 0;
    public movementSpeedPerLevel = 0;
    public xpBonusPerLevel = 0;
    public goldBonusPerLevel = 0;
}

export class EnemyManagerSettings {
    public enemies: EnemySettings[] = [new EnemySettings()];
    public individualEnemySpawners: IndividualEnemySpawnerSettings[] = [new IndividualEnemySpawnerSettings()];
    public circularEnemySpawners: CircularEnemySpawnerSettings[] = [new CircularEnemySpawnerSettings()];
    public waveEnemySpawners: WaveEnemySpawnerSettings[] = [new WaveEnemySpawnerSettings()];
}

export class GeneralEnemySpawnerSettings {
    public enemyId = "";
    public startDelay = 0;
    public stopDelay = 0;
    public cooldown = 0;
}

export class WaveEnemySpawnerSettings {
    public common = new GeneralEnemySpawnerSettings();
    public enemiesToSpawn = 0;
}

export class CircularEnemySpawnerSettings {
    public common = new GeneralEnemySpawnerSettings();
    public enemiesToSpawn = 0;
}

export class IndividualEnemySpawnerSettings {
    public common = new GeneralEnemySpawnerSettings();
}

export class EnemySettings {
    public id = "";
    public moveType = "";
    public health = 0;
    public damage = 0;
    public speed = 0;
    public lifetime = 0;
    public xpReward = 0;
    public goldReward = 0;
}