import java.util.*; // Agregado para la clase Properties
import java.io.*; // Agregado para Mostrar error por consola

public final class Archivo
{
   private final String ArchivoClientes = "DetalleClientes.ini";
	private final String ArchivoDescuentos = "Descuentos.ini";
	private final String ArchivoProductos = "TipoProductos.ini";

   public Archivo()
	{
	}
	
	public int leerCliente(String rut) // Entrega el tipo de cliente asociado al rut
	{
	   int j=0;  
		try
	   { 
	      Properties pClientes = new Properties(); // Agregado para leer .ini
         pClientes.load(new FileInputStream(ArchivoClientes)); // Se leen valores de .ini
	      j = Integer.parseInt(pClientes.getProperty("R"+rut)); // Lee cada rut
		}
		catch (Exception e) // Recive las excepciones
		{
            System.out.println(e);
      }
		return j;
	}
	
	public boolean buscaRut(String rut)
	{
	  boolean j = false;
	  try
	  { 
	     Properties pClientes = new Properties(); // Agregado para leer .ini
        pClientes.load(new FileInputStream(ArchivoClientes)); // Se leen valores de .ini
	     j = pClientes.containsKey("R"+rut);      
	  }
	  catch (Exception e)  // Recibe los errores
     {     
	     System.out.println(e);
     }
	  return j;
	}

   public void saveRut(String rut, int tipo) //Graba el rut en el archivo .ini
	{

	  try
	   { 
	      Properties pClientes = new Properties(); // Agregado para leer .ini
         pClientes.load(new FileInputStream(ArchivoClientes)); // Se leen valores de .ini
	      pClientes.setProperty("R"+rut, ""+tipo); // Se agrega al objeto Properties el nuevo rut y su valor
		   pClientes.store(new FileOutputStream(ArchivoClientes), ""); // Se guarda toda la info al .ini
		}
		catch (Exception e) // Recive las excepciones
		{
            System.out.println(e);
      }
	}

   public double leerDescuento(int clientType) // Entrega el descuento asociado a un tipo de cliente
	{
	   double d = 0.0;  
		try
		{ 
	      Properties pDescuentos = new Properties();
			pDescuentos.load(new FileInputStream(ArchivoDescuentos));
		   d = Double.parseDouble(pDescuentos.getProperty("D"+clientType)); // Lee el Descuento
		}
		   catch (Exception e) { // Recibe los errores
         System.out.println(e);
      }
		return d;
	}	
	
   public Vector<String> leerProductos()  // Entrega un Vector con todos los productos que estan a la venta
	{
	   Set <String> s = null;
		Vector<String> v = new Vector <String> ();
		try // Agregado para poder leer y considerar posibles errores
	   { 
	      Properties pTipos = new Properties(); // Agregado para leer .ini
         pTipos.load(new FileInputStream(ArchivoProductos)); // Se leen valores de .ini
	      s = pTipos.stringPropertyNames(); // Se asignan los valores leidos
		}
		catch (Exception e) // Recibe los errores
	   { 
         System.out.println(e);
      }
		String[] str = s.toArray(new String[0]);
		for(int i=0; i<str.length; i++)
		   v.add(str[i]);
		
		return v;
   }
	
	public Vector<String> leerTiposClientes() // Entrega un Vector con todos los tipos de clientes disponibles

	{
	   Set <String> s = null;
		Vector<String> v = new Vector <String> ();
		try // Agregado para poder leer y considerar posibles errores
	   { 
	      Properties pTipos = new Properties(); // Agregado para leer .ini
         pTipos.load(new FileInputStream(ArchivoDescuentos)); // Se leen valores de .ini
	      s = pTipos.stringPropertyNames(); // Se asignan los valores leidos
		}
		catch (Exception e) // Recibe los errores
	   { 
         System.out.println(e);
      }
		String[] str = s.toArray(new String[0]);
		for(int i=0; i<str.length; i++)
		   v.add(str[i]);
		return v;
   }
	
	public Vector<String> leerPrecios() // Entrega un Vector con todos los precios de los productos

	{
	   Vector<String> v = leerProductos();
		Vector<String> price = new Vector<String>();
		try 
	   { 
	      Properties pTipos = new Properties(); // Agregado para leer .ini
         pTipos.load(new FileInputStream(ArchivoProductos)); // Se leen valores de .ini
	      for(int i=0; i<v.size(); i++)
			   price.add(pTipos.getProperty(v.get(i))); 
		}
		catch (Exception e) // Recibe los errores
	   { 
         System.out.println(e);
      }
		return price;
   }
	
	public int leerPrecio(String producto) // Entrega el precio de un producto en particular
	{
	 int precio = 0;  
		try // Agregado para poder leer y considerar posibles errores
	   { 
	      Properties pTipos = new Properties(); // Agregado para leer .ini
         pTipos.load(new FileInputStream(ArchivoProductos)); // Se leen valores de .ini
	      precio = Integer.parseInt(pTipos.getProperty(producto));
		}
		catch (Exception e) // Recibe los errores
	   { 
         System.out.println(e);
      }
		return precio;
   }
	
	public Vector<String> leerClientes(int tipo)  // Entrega un Vector con los rut de todos los clientes de cierto tipo
	{
	   Set <String> s = null;
		Vector<String> v = new Vector <String> ();
		try // Agregado para poder leer y considerar posibles errores
	   { 
	      Properties pTipos = new Properties(); // Agregado para leer .ini
         pTipos.load(new FileInputStream(ArchivoClientes)); // Se leen valores de .ini
	      s = pTipos.stringPropertyNames(); // Se asignan los valores leidos
		}
		catch (Exception e) // Recibe los errores
	   { 
         System.out.println(e);
      }
		String[] str = s.toArray(new String[0]);
		int j =0;
		for(int i=0; i<str.length; i++)
		{
			j = leerCliente(str[i].substring(1));
			if(j==tipo)
			{
			   v.add(str[i]);
			}
		}
		
		return v;
   }
}