package engine.graphics;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import engine.helper.Assets;

public class MarioBackground extends MarioGraphics {
    private Image image;
    private Graphics2D g;
    private int screenWidth;

    public MarioBackground(GraphicsConfiguration graphicsConfiguration, int screenWidth, int[][] indeces) {
        super();
        this.width = indeces[0].length * 16;
        this.height = indeces.length * 16;
        this.screenWidth = screenWidth;
        if (graphicsConfiguration != null){
            image = graphicsConfiguration.createCompatibleImage(width, height, Transparency.BITMASK);
        }else{
            image = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
        }
        g = (Graphics2D) image.getGraphics();
        g.setComposite(AlphaComposite.Src);

        updateArea(indeces);
    }

    private void updateArea(int[][] indeces) {
        g.setBackground(new Color(0, 0, 0, 0));
        g.clearRect(0, 0, this.width, this.height);
        for (int x = 0; x < indeces[0].length; x++) {
            for (int y = 0; y < indeces.length; y++) {
                int xTile = indeces[y][x] % 8;
                int yTile = indeces[y][x] / 8;
                g.drawImage(Assets.level[xTile][yTile], x * 16, y * 16, 16, 16, null);
            }
        }
    }

    @Override
    public void render(Graphics og, int x, int y) {
        int xOff = x % this.width;
        for (int i = -1; i < this.screenWidth / this.width + 1; i++) {
            og.drawImage(image, -xOff + i * this.width, 0, null);
        }
    }

}
