import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.text.NumberFormat;

// This class handles reading input from the player
// Each input is an x and y coordinate
// e.g. 5,3
public class Input {
    private BufferedReader reader;
    private NumberFormat parser;
    private int scale;             // size of the sea, needed to validate input
    private boolean isQuit;        // whether the input has ended
    private int[] coords;          // the last coordinates read

    public Input(int seaSize) {
        scale = seaSize;
        reader = new BufferedReader(new InputStreamReader(System.in));
        parser = NumberFormat.getIntegerInstance();
    }

    public boolean readCoordinates() throws IOException {
        while (true) {
            // Write a prompt
            System.out.print("\nTarget x,y\n> ");
            String inputLine = reader.readLine();
            if (inputLine == null) {
                // If the input stream is ended, there is no way to continue the game
                System.out.println("\nGame quit\n");
                isQuit = true;
                return false;
            }

            // split the input into two fields
            String[] fields = inputLine.split(",");
            if (fields.length != 2) {
                // has to be exactly two
                System.out.println("Need two coordinates separated by ','");
                continue;
            }

            coords = new int[2];
            boolean error = false;
            // each field should contain an integer from 1 to the size of the sea
            try {
                for (int c = 0 ; c < 2; ++c ) {
                    int val = Integer.parseInt(fields[c].strip());
                    if ((val < 1) || (val > scale)) {
                        System.out.println("Coordinates must be from 1 to " + scale);
                        error = true;
                    } else {
                        coords[c] = val;
                    }
                }
            }
            catch (NumberFormatException ne) {
                // this happens if the field is not a valid number
                System.out.println("Coordinates must be numbers");
                error = true;
            }
            if (!error) return true;
        }
    }

    public int x() { return coords[0]; }
    public int y() { return coords[1]; }
}
