package main.entities.player;

import main.items.Item;

/**
 * Container Klasse für das Inventar des Spielers,
 * eventuell später verallgemeinerbar für Truhen o.ä. je nach design dieser.
 */
public class PlayerInventory {
    private int coins;
    private Item[] items;
    private int currentItem;

    /**
     * Erstellt ein Player Inventar, welches einen Coin counter und ein Item Inventar enthält.
     * @param inventorySize Gibt die größe des Item inventars als int an.
     */
    public PlayerInventory(int inventorySize){
            items = new Item [inventorySize];
            currentItem = 0;
    }

    /**
     * Getter für den Coin counter
     * @return Gibt die Anzahl der Coins im Inventar als int zurück.
     */
    public int getCoins(){
        return coins;
    }

    /**
     * Setzt die Anzahl von Coins im Inventar zu angegebener Anzahl.
     * @param coins Anzahl an coins als int, die im Inventar sein sollen.
     */
    public void setCoins(int coins) {
        this.coins = coins;
    }

    /**
     * Fügt die angegebene Anzahl an Coins in das Inventar hinzu.
     * @param amount Die Anzahl an Coins als int, die hinzugefügt werden soll.
     */
    public void addCoins(int amount){
        this.coins+= amount;
    }

    /**
     * Entfernt die angegebene Anzahl an Coins vom Inventar.
     * @param amount Die Anzahl an Coins als int, die entfernt werden soll.
     */
    public void subtractCoins(int amount){
        this.coins-= amount;
    }

    /**
     * Getter für das Items im Inventar.
     * @return gibt ein Array mit allen Item Objekten zurück, die im Inventar enthalten sind.
     */
    public Item[] getItems(){
        return items;
    }

    /**
     * Ersetzt das jetzige Inventar um ein neues mit im Item-Array items angegebenen Items.
     * @param items Array mit Items die das Inventar ersetzen sollen.
     */
    public void setItems(Item[] items) {
        this.items = items;
    }

    /**
     * Entfernt ein Item auf angegebner Position im Item-Array.
     * @param itemPosition Position des Items das entfernt werden soll, angegeben als int.
     */
    public void removeItem(int itemPosition) {
        items[itemPosition]=null;
    }

    /**
     * Setzt das gerade ausgewählte Item fest.
     * @param currentItem int gibt an welcher Index des Item Arrays ausgewählt werden soll.
     */
    public void setCurrentItem(int currentItem) {
        this.currentItem = currentItem;
    }

    /**
     * Wechselt auf den nächsten Slot im Inventar.
     */
    public void changeCurrentItem(){
        if(currentItem>=items.length) currentItem=0;
        else currentItem++;
    }

    /**
     * Methode zum Hinzufügen von Items.
     * @param newItem Das Item, dass hinzugefügt werden soll.
     * @return gibt zurück ob das Item hinzugefügt wurde, d.h. true wenn hinzugefügt und false wenn nicht hinzugefügt.
     */
    public boolean addItem(Item newItem){
        for(int i =0;i< items.length;i++) {
            if (items[i] == null) {
                items[i] = newItem;
                return true;
            }
        }
        return false;
    }





}
