/*
 *   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.entity;

import org.bukkit.Location;
import org.bukkit.entity.EntityType;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * CEntities are Entities that are a compound of other Entities.
 */
public class CEntity extends REntity {

    protected List<REntity> entities = new ArrayList<>();

    public CEntity(REntityServer server) {
        super(server, EntityType.MARKER, new Location(null, 0, 0, 0));
    }

    public List<REntity> getEntities() {
        return new ArrayList<>(entities);
    }

    public <T extends REntity> List<T> getEntitiesByType(Class<T> clazz) {
        return entities.stream().filter(clazz::isInstance).map(clazz::cast).collect(Collectors.toList());
    }

    @Override
    void tick() {
        entities.forEach(REntity::tick);
    }

    @Override
    public void hide(boolean hide) {
        super.hide(hide);
        entities.forEach(rEntity -> {
            rEntity.hide(hide);
        });
    }

    @Override
    public void die() {
        super.die();
        entities.forEach(REntity::die);
        entities.clear();
    }
}
