// This program reads in some positions from a file into an Array List
// and allows you to move through them ,view them and change them
//
// r - read file
// t - output list
// f - output current
// n - go one up list & output it
// m - change current position
// b - go back to start of list
// q - quit
//
// by Neil Broadbent

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.io.FileReader;


public class ReadList
{
    static String tLongString;
    static String tLatString;
    static int iPointNumber=0;
    static int tArraySize=0;
    
    static Position tPosition = new PositionImpl("000-00-00-W:00-00-00-N");
    static List tPositionList = new ArrayList();

    public static void main(String[] pArgs) throws IOException
        {
            System.out.println("Welcome To The Flight Planner ");
            menu();
        }

    public static void menu() throws IOException
        {
            int tOption=9;
            String tInput = NeilClass.GetInputString("");

            if (tInput.equals("r")) {tOption = 0;}
            if (tInput.equals("t")) {tOption = 1;}
            if (tInput.equals("f")) {tOption = 2;}
            if (tInput.equals("n")) {tOption = 3;}
            if (tInput.equals("m")) {tOption = 4;}
            if (tInput.equals("b")) {tOption = 5;}
            if (tInput.equals("q")) {tOption = 6;}
            
            
            switch (tOption)
            {
                case 0:
                {
                    ReadFile();
                    menu();
                    break;
                }
                case 1:
                {
                    DisplayList();
                    menu();
                    break;
                }
                case 2:
                {
                    GetCurrent();
                    menu();
                    break;
                }
                case 3:
                {
                    GetNext();
                    menu();
                    break;
                }
                case 4:
                {
                    ChangeCurrent();
                    menu();
                    break;
                    
                }
                case 5:
                {
                    ToFirst();
                    menu();
                    break;
                }
                case 6:
                {
                    System.exit(1);
                    break;
                }
                default:
                {
                    menu();
                }
            }
        }


    public static void ReadFile() throws IOException
        {
            String tFileName = NeilClass.GetInputString("Type in the filname ");
            final BufferedReader tInputHandle = new BufferedReader(new FileReader(tFileName));
            while (true)
            {
                final String tLine = tInputHandle.readLine();
                if (tLine==null)
                {
                    break;
                }
                tPosition = new PositionImpl(tLine);
                tPositionList.add(tPosition);
            }
            tArraySize = tPositionList.size();
            
            System.out.println(tPositionList.size() + " positions read in.");
            
        }

    public static void DisplayList()
        {
            Iterator tIterator = tPositionList.iterator();
            while (tIterator.hasNext()){
                tPosition = (Position)tIterator.next();
                System.out.println(tPosition);
            }
        }

    public static void GetCurrent()
        {
            if (iPointNumber < tArraySize){
                Object tCur = tPositionList.get(iPointNumber);
                String tCurrent = tCur.toString();
                System.out.println((iPointNumber + 1)+ ": " + tCurrent);
            }
            else{
                System.out.println("There are no more positions left");
            }
        }

    public static void GetNext()
        {
                iPointNumber++;
                GetCurrent();
        }

    public static void ChangeCurrent() throws IOException
        {
            String tPos = NeilClass.GetInputString("Type in the new co-ordinate ");
            tPosition = new PositionImpl(tPos);
            tPositionList.set(iPointNumber, tPosition);
        }

    public static void ToFirst()
        {
            iPointNumber=0;
        }
    
}
