package com.mojang.blaze3d.platform;

import java.util.regex.Matcher;
import java.util.Optional;
import javax.annotation.Nullable;
import java.util.Objects;
import org.lwjgl.glfw.GLFWVidMode;
import java.util.regex.Pattern;

public final class VideoMode {
    private final int width;
    private final int height;
    private final int redBits;
    private final int greenBits;
    private final int blueBits;
    private final int refreshRate;
    private static final Pattern PATTERN;
    
    public VideoMode(final int integer1, final int integer2, final int integer3, final int integer4, final int integer5, final int integer6) {
        this.width = integer1;
        this.height = integer2;
        this.redBits = integer3;
        this.greenBits = integer4;
        this.blueBits = integer5;
        this.refreshRate = integer6;
    }
    
    public VideoMode(final GLFWVidMode.Buffer buffer) {
        this.width = buffer.width();
        this.height = buffer.height();
        this.redBits = buffer.redBits();
        this.greenBits = buffer.greenBits();
        this.blueBits = buffer.blueBits();
        this.refreshRate = buffer.refreshRate();
    }
    
    public VideoMode(final GLFWVidMode gLFWVidMode) {
        this.width = gLFWVidMode.width();
        this.height = gLFWVidMode.height();
        this.redBits = gLFWVidMode.redBits();
        this.greenBits = gLFWVidMode.greenBits();
        this.blueBits = gLFWVidMode.blueBits();
        this.refreshRate = gLFWVidMode.refreshRate();
    }
    
    public int getWidth() {
        return this.width;
    }
    
    public int getHeight() {
        return this.height;
    }
    
    public int getRedBits() {
        return this.redBits;
    }
    
    public int getGreenBits() {
        return this.greenBits;
    }
    
    public int getBlueBits() {
        return this.blueBits;
    }
    
    public int getRefreshRate() {
        return this.refreshRate;
    }
    
    @Override
    public boolean equals(final Object object) {
        if (this == object) {
            return true;
        }
        if (object == null || this.getClass() != object.getClass()) {
            return false;
        }
        final VideoMode cxw3 = (VideoMode)object;
        return this.width == cxw3.width && this.height == cxw3.height && this.redBits == cxw3.redBits && this.greenBits == cxw3.greenBits && this.blueBits == cxw3.blueBits && this.refreshRate == cxw3.refreshRate;
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(this.width, this.height, this.redBits, this.greenBits, this.blueBits, this.refreshRate);
    }
    
    @Override
    public String toString() {
        return String.format("%sx%s@%s (%sbit)", this.width, this.height, this.refreshRate, this.redBits + this.greenBits + this.blueBits);
    }
    
    public static Optional<VideoMode> read(@Nullable final String string) {
        if (string == null) {
            return Optional.<VideoMode>empty();
        }
        try {
            final Matcher matcher2 = VideoMode.PATTERN.matcher(string);
            if (matcher2.matches()) {
                final int integer3 = Integer.parseInt(matcher2.group(1));
                final int integer4 = Integer.parseInt(matcher2.group(2));
                final String string2 = matcher2.group(3);
                int integer5;
                if (string2 == null) {
                    integer5 = 60;
                }
                else {
                    integer5 = Integer.parseInt(string2);
                }
                final String string3 = matcher2.group(4);
                int integer6;
                if (string3 == null) {
                    integer6 = 24;
                }
                else {
                    integer6 = Integer.parseInt(string3);
                }
                final int integer7 = integer6 / 3;
                return Optional.<VideoMode>of(new VideoMode(integer3, integer4, integer7, integer7, integer7, integer5));
            }
        }
        catch (Exception ex) {}
        return Optional.<VideoMode>empty();
    }
    
    public String write() {
        return String.format("%sx%s@%s:%s", this.width, this.height, this.refreshRate, this.redBits + this.greenBits + this.blueBits);
    }
    
    static {
        PATTERN = Pattern.compile("(\\d+)x(\\d+)(?:@(\\d+)(?::(\\d+))?)?");
    }
}
