import type.lang.*;
import type.lib.*;

public class DemoGlobalCredit
{
   public static void main(String[] args)
   {
		// -----------------------
		// check for correct usage
		// -----------------------

		if (args.length != 1)
		{
			IO.println("-------------------------------------------");
			IO.println("Usage: java DemoGlobalCredit file\n");
			IO.println("where 'file' is a credit card database file");
			IO.println("(see 'creditcards.txt' for example file)");
			IO.println("-------------------------------------------");
			System.exit(0);
		}

		// -----------------
		// load the database
		// -----------------

		IO.print("Loading the database... ");
		GlobalCredit gc = new GlobalCredit();		
		UniReader ur = new UniReader(args[0]);

		String s;
		while ((s = ur.readLine()) != null)
		{
			// skip empty lines or lines beginning with '#' (comments)
			if (s.length() == 0 || s.charAt(0) == '#') 
				continue;

			int number = Integer.parseInt(s);
			String name = ur.readLine();
			double limit = ur.readDouble();
			double balance = ur.readDouble();
			//IO.println(number + " : " + name + " : " + balance);
			CreditCard cc = new CreditCard(number, name, limit);
			if (!cc.charge(balance))
			{
				IO.println("Charge exceeds limit!");
				System.exit(0);
			}
			gc.add(cc);
		}
		IO.println("Done!");

		// -------------
		// traverse demo
		// -------------

		IO.println("Traverse demo... ");

		CreditCard c;
		IO.print("NUMBER", "15L");
		IO.print("NAME", "15L");
		IO.print("LIMIT", "10");
		IO.print("     ");
		IO.println("BALANCE", "10");
		
		for (c = gc.getFirst(); c != null; c = gc.getNext())
		{
			IO.print(c.getNumber(), "15L");
			IO.print(c.getName(), "15L");
			IO.print("$" + c.getLimit(), "10.0");
			IO.print("     ");
			IO.println("$" + c.getBalance(), "10.2");
		}
		IO.println("Done!");

		// -----------
		// search demo
		// -----------

		IO.println("Interactive search demo... ");

		while (true)
		{
			IO.println("Enter the card number to look for (-1 to quit):");
			String cardNo = IO.readLine();

			// check for escape condition
			if (cardNo.equals("-1"))
				break;

			CreditCard cc;

			// convoluted 'for' structure (see text, p. 221)
			for (cc = gc.getFirst(); cc != null && !cc.getNumber().equals(cardNo); )
				cc = gc.getNext();

			// output search results
			if (cc == null)
				IO.println("No such card!");
			else
				IO.print("Card found. Its balance is $" + cc.getBalance(), ".2");

			// request for another go at it
			IO.println("\nTry again?");
		}
		IO.println("\nDone! Have a nice day.");
   }
}

