/*
 *   This file is a part of the SteamWar software.
 *
 *   Copyright (C) 2025 SteamWar.de-Serverteam
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU Affero General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *   GNU Affero General Public License for more details.
 *
 *   You should have received a copy of the GNU Affero General Public License
 *   along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package de.steamwar.lobby.particle.particles;

import de.steamwar.lobby.particle.ParticleData;
import de.steamwar.lobby.particle.ParticleEnum;
import de.steamwar.lobby.particle.elements.DustParticle;
import de.steamwar.lobby.particle.elements.LocationMutator;
import de.steamwar.lobby.particle.elements.SimpleParticle;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.bukkit.Material;
import org.bukkit.Particle;

@AllArgsConstructor
public enum PlayerParticle implements ParticleEnum {

    SNEEZE(new ParticleData(Material.SLIME_BLOCK, "PARTICLE_SNEEZE",
            new SimpleParticle(Particle.SNEEZE, 0.2F, 0.2F, 0.2F, 0.01))
    ),
    SMOKE(new ParticleData(Material.COBWEB, "PARTICLE_SMOKE",
            new SimpleParticle(Particle.SMOKE, 0.2F, 0.2F, 0.2F, 0.01))
    ),
    FIRE(new ParticleData(Material.LAVA_BUCKET, "PARTICLE_FIRE",
            new SimpleParticle(Particle.DRIPPING_LAVA))
    ),
    WATER(new ParticleData(Material.WATER_BUCKET, "PARTICLE_WATER",
            new SimpleParticle(Particle.DRIPPING_WATER))
    ),
    HEARTH(new ParticleData(Material.RED_DYE, "PARTICLE_HEART",
            new LocationMutator(new SimpleParticle(Particle.HEART), 0, 2.2, 0))
    ),
    NOTES(new ParticleData(Material.NOTE_BLOCK, "PARTICLE_NOTES",
            new LocationMutator(new SimpleParticle(Particle.NOTE), 0, 2.2, 0))
    ),
    NAUTILUS(new ParticleData(Material.NAUTILUS_SHELL, "PARTICLE_NAUTILUS",
            new SimpleParticle(Particle.NAUTILUS, 0.2F, 0.2F, 0.2F, 0.01))
    ),
    SNOWBALL(new ParticleData(Material.SNOWBALL, "PARTICLE_SNOWBALL",
            new SimpleParticle(Particle.SNOWFLAKE, 0.2F, 0.2F, 0.2F, 0.01))
    ),
    EFFECT(new ParticleData(Material.GLASS_BOTTLE, "PARTICLE_EFFECT",
            new DustParticle(Particle.DUST, 0, 0.2F, 0, 0.01, 5, null))
    ),
    CAMPFIRE(new ParticleData(Material.CAMPFIRE, "PARTICLE_CAMPFIRE",
            new SimpleParticle(Particle.CAMPFIRE_COSY_SMOKE, 0, 0.2F, 0, 0.01))
    ),
    MAGIC(new ParticleData(Material.CAULDRON, "PARTICLE_MAGIC",
            new SimpleParticle(Particle.CRIT, 0.2F, 0.2F, 0.2F, 0.01))
    ),
    ANGRY(new ParticleData(Material.REDSTONE_BLOCK, "PARTICLE_ANGRY",
            new SimpleParticle(Particle.ANGRY_VILLAGER, 0.2F, 0.2F, 0.2F, 0.01))
    ),
    SLIME(new ParticleData(Material.SLIME_BALL, "PARTICLE_SLIME",
            new SimpleParticle(Particle.ITEM_SLIME))
    ),
    MOB(new ParticleData(Material.ZOMBIE_HEAD, "PARTICLE_MOB",
            new SimpleParticle(Particle.SOUL))
    ),
    ;
    public static ParticleEnum[] particles = values();

    @Getter
    private ParticleData particle;
}
