package eu.mhsl.minenet.minigames.util;


import java.util.ArrayList;
import java.util.List;

public class InventoryItemAlignment {
    private final int size;
    private final int x;
    private final int y;

    private int counter = -1;

    public InventoryItemAlignment(int size, int x, int y) {
        this.size = size;
        this.x = x;
        this.y = y;

        if(x * y < size) throw new RuntimeException("Not enough space for Item alignment");
    }

    public InventoryItemAlignment(int size, int y) {
        this.size = size;
        this.x = 9;
        this.y = y;

        if(this.x * y < size) throw new RuntimeException("Not enough space for Item alignment");
    }

    public ItemOffset next() {
        this.counter++;

        if(this.size < 9) return new ItemOffset(this.row(this.size).get(this.counter), this.y > 1 ? 1 : 0);
        //TODO more items?
        return new ItemOffset(0, 0);

    }


    private List<Integer> row(int count) {
        return new ArrayList<ArrayList<Integer>>() {
            {
                //noinspection EmptyClassInitializer
                this.add(new ArrayList<>() {
                    static {
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(4);
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(3);
                        this.add(5);
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(2);
                        this.add(4);
                        this.add(6);
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(1);
                        this.add(3);
                        this.add(5);
                        this.add(7);
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(2);
                        this.add(3);
                        this.add(4);
                        this.add(5);
                        this.add(6);
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(1);
                        this.add(2);
                        this.add(3);
                        this.add(5);
                        this.add(6);
                        this.add(7);
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(1);
                        this.add(2);
                        this.add(3);
                        this.add(4);
                        this.add(5);
                        this.add(6);
                        this.add(7);
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(0);
                        this.add(1);
                        this.add(2);
                        this.add(3);
                        this.add(5);
                        this.add(6);
                        this.add(7);
                        this.add(8);
                    }
                });
                this.add(new ArrayList<>() {
                    {
                        this.add(0);
                        this.add(1);
                        this.add(2);
                        this.add(3);
                        this.add(4);
                        this.add(5);
                        this.add(6);
                        this.add(7);
                        this.add(8);
                    }
                });
            }
        }.get(count);
    }

    public record ItemOffset(int x, int z) {

        public int get() {
            return this.x + (this.z * 9);
        }
    }
}
