package dbcvote;

import java.util.LinkedList;
import java.util.Arrays;

public class Vote {
       private LinkedList prefs;
       private LinkedList clean_prefs;

       public Vote(LinkedList prefs) {
              this.prefs = prefs;
       }

       public void validateVote() throws SpoiledVoteException {
              Preference[] sorted = new Preference[prefs.size()];
              sorted = (Preference[]) prefs.toArray(sorted);

              Arrays.sort(sorted);
              clean_prefs = new LinkedList();
              int i;

              if (sorted[0].getPref() != 1) {
                  throw new SpoiledVoteException("No first preference");
              }

              for (i = 1; i < sorted.length; i++) {
                  if ( (sorted[i].compareTo(sorted[i - 1]) == 0)
                    || (sorted[i].getPref() > (sorted[i - 1].getPref() + 1)) ) {
                    i -= 1;
                    break;
                  }
              }

              if (i == 0) {
                  throw new SpoiledVoteException("Multiple first preferences");
              }

              for (int j = 0; j < i; j++) {
                  clean_prefs.add(sorted[j]);
              }
       }

       public String toString() {
              LinkedList out;
              if (clean_prefs != null) {
                 out = clean_prefs;
              }
              else {
                 out = prefs;
              }

              String out_string = new String();

              for (int i = 0; i < out.size(); i++) {
                  out_string += out.get(i).toString();
              }

              return out_string;
       }
}

