package ANTARCTICA.downloadTest;

import java.util.*;
import java.io.*;

import com.objectspace.voyager.*;

public class Pick implements IPick, IRemote {

   private Vector pieces=new Vector();
   
   class Fichero implements Comparable {
	  long length;
	  String name;
	  
	  Fichero(long l, String n) { length=l; name=n; }
	  
	  public int compareTo(Object o) {
	     long l=((Fichero)o).length;
         if (this.length<l) return -1;
         else if (this.length>l) return 1;
		 else return 0;
	  }
   }
   
   
   public Pick() throws IOException {
      File dir=new File(".");
      String[] lista=dir.list();

      Fichero[] ficheros=new Fichero[lista.length];
      for (int i=0;i<lista.length;i++) {
	  System.out.println(lista[i]);
         File fichero=new File(lista[i]);
         long longitud=fichero.length();
         ficheros[i]=new Fichero(longitud, lista[i]);
      }
      System.out.println(ficheros.length+" files found in "+dir.getAbsolutePath());

      Arrays.sort(ficheros); // Ordenamos descendentemente por longitud
      for (int i=0;i<ficheros.length;i++) {
         System.out.println("Reading "+ficheros[i].name+", "+ficheros[i].length+" bytes");
         pieces.addElement(ficheros[i].name);
      }
   }

   // Devuelve el numero de piezas disponibles

   public int getNumPieces() {
      System.out.println("Pick: new request getNumPieces");
      return pieces.size();
   }


   // Devuelve el nombre de la pieza indicada

   public String getPieceName(int num) {
      System.out.println("Pick: new request getPieceName("+num+")");
      return (String)pieces.elementAt(num);
   }


   // Devuelve la pieza indicada

   public Object pick(int piece) {

      System.out.println("Pick: new request pick(" + piece + ")");
      Piece result=null;
      try {
         if (piece>=0 && piece<pieces.size()) {
            String filename=(String)pieces.elementAt(piece);
            System.out.println("Piece requested: "+filename);
            result=new Piece(filename);
		 	result.setName(filename);
         } else {
            String message = "piece " + piece + " does not exist";
            System.out.println("ERROR: " + message);
            throw new IllegalArgumentException(message);
         }
         System.out.println("Returning piece");
         return result;
      } catch (IOException e) {
         System.out.println("ERROR: " + e.toString());
         throw new RuntimeException(e.toString());
      }
   }

}
