package futils;

import java.io.BufferedReader;
import java.io.IOException;
import java.util.Vector;


public class CsvReader {
  private BufferedReader br;
  private Vector v = new Vector();

  public CsvReader(BufferedReader _br) {
    br = _br;
    getLines();
    System.out.println("read " + v.size() + " lines");
    System.out.println("number of bad records=" + numberOfBadRecords);
  }

  private int numberOfBadRecords = 0;

  class Address {
    String lastName = "";
    String firstName = "";
    String address1 = "";
    String address2 = "";
    String address3 = "";
    String address4 = "";
    String address5 = "";
    String homePhone = "";
    String businessPhone = "";
    String faxPhone = "";

    Address(String s[]) {
      try {
        lastName = s[0];
        firstName = s[1];
        address1 = s[2];
        address2 = s[3];
        address3 = s[4];
        address4 = s[5];
        address5 = s[6];
        homePhone = s[7];
        businessPhone = s[8];
        faxPhone = s[9];
      } catch (ArrayIndexOutOfBoundsException e) {
        numberOfBadRecords++;
      }
    }

    private String outLine(String s) {
      if (s.equals("")) return s;
      return "\n" + s;
    }

    public String toString() {
      return outLine("---")
          + outLine(firstName + " " + lastName)
          + outLine(address1)
          + outLine(address2)
          + outLine(address3)
          + outLine(address4)
          + outLine(address5)
          + outLine(homePhone)
          + outLine(businessPhone)
          + outLine(faxPhone);
    }

  }

  public String getRecord(int i) {
    return v.elementAt(i).toString();
  }

  private void processLine(String l) {
    v.addElement(new Address(
        new CsvParser(l).getTokens()
    ));
  }

  private void getLines() {
    try {
      for (String l = br.readLine();
           l != null; l = br.readLine())
        processLine(l);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public static void main(String args[]) {
    CsvReader cr = new CsvReader(
        ReaderUtil.getBufferedReader(
            Futil.getReadFile("Select a CSV file")
        )
    );
    System.out.println(
        cr.getRecord(0)
        + cr.getRecord(1)
        + cr.getRecord(2)
        + cr.getRecord(3));
  }

  public void setBr(java.io.BufferedReader br) {
    this.br = br;
  }

  public void setV(java.util.Vector v) {
    this.v = v;
  }

  public void setNumberOfBadRecords(int numberOfBadRecords) {
    this.numberOfBadRecords = numberOfBadRecords;
  }
}