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(x * y < size) throw new RuntimeException("Not enough space for Item alignment");
    }

    public ItemOffset next() {
        counter++;

        if(this.size < 9) return new ItemOffset(this.row(this.size).get(counter), 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
                add(new ArrayList<>() {
                    static {
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(4);
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(3);
                        add(5);
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(2);
                        add(4);
                        add(6);
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(1);
                        add(3);
                        add(5);
                        add(7);
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(2);
                        add(3);
                        add(4);
                        add(5);
                        add(6);
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(1);
                        add(2);
                        add(3);
                        add(5);
                        add(6);
                        add(7);
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(1);
                        add(2);
                        add(3);
                        add(4);
                        add(5);
                        add(6);
                        add(7);
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(0);
                        add(1);
                        add(2);
                        add(3);
                        add(5);
                        add(6);
                        add(7);
                        add(8);
                    }
                });
                add(new ArrayList<>() {
                    {
                        add(0);
                        add(1);
                        add(2);
                        add(3);
                        add(4);
                        add(5);
                        add(6);
                        add(7);
                        add(8);
                    }
                });
            }
        }.get(count);
    }

    public record ItemOffset(int x, int z) {

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