package versao2;

import java.io.PrintStream;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import versao2.dominio.Cliente;
import versao2.dominio.ItemPedido;
import versao2.dominio.Pedido;
import versao2.persistencia.ClienteDAO;
import versao2.persistencia.DAOFactory;
import versao2.persistencia.PedidoDAO;
import versao2.persistencia.impl.DAOFactoryImpl;


/**
 * Aplicacao a ser executada.
 */
public class Main {
  public static void main(String[] args) {
    PrintStream out = System.out;
    DateFormat df = new SimpleDateFormat("dd/mm/yyy");
    NumberFormat nf = NumberFormat.getInstance();

    DAOFactory daoFactory = DAOFactoryImpl.getInstance();
    ClienteDAO clienteDAO = daoFactory.createClienteDAO();
    PedidoDAO pedidoDAO = daoFactory.createPedidoDAO();

    try {
      clienteDAO.removerTodos();
      out.println("\n> Removidos os dados antigos.");

      out.println("\n> Criando clientes.");
      Cliente fulano   = new Cliente("Fulaniu");
      Cliente cicrano  = new Cliente("Cicrano");
      Cliente beltrano = new Cliente("Beltrano");

      out.println("\n> Criando pedidos para os clientes");
      Pedido p1 = new Pedido(new Date(),fulano);
      Pedido p2 = new Pedido(new Date(),fulano);
      Pedido p3 = new Pedido(new Date(),cicrano);

      out.println("\n> Adicionando items aos pedidos");
      p1.getItems().add(new ItemPedido("Notebook",1,1.99f));
      p1.getItems().add(new ItemPedido("Mouse",2,1.99f));
      p2.getItems().add(new ItemPedido("Cooler",3,1.99f));
      p2.getItems().add(new ItemPedido("DVD",4,1.99f));
      p3.getItems().add(new ItemPedido("Monitor",5,1.99f));

      out.println("\n> Salvando os clientes e pedidos.");
      clienteDAO.save(fulano);
      clienteDAO.save(cicrano);
      clienteDAO.save(beltrano);
      pedidoDAO.save(p1);
      pedidoDAO.save(p2);
      pedidoDAO.save(p3);

      out.println("\n> Alternado um cliente");
      fulano.setNome("Fulano");
      clienteDAO.save(fulano);

      out.println("\n> Removendo um cliente");
      clienteDAO.remove(beltrano);

      out.println("\n> Listando clientes e pedidos");
      List /*Cliente*/ clientes = clienteDAO.buscarTodos();
      for (Iterator iter = clientes.iterator(); iter.hasNext(); ) {
        Cliente cliente = (Cliente)iter.next();
        out.print("\n>+ Cliente: ");
        out.println(cliente.getNome());

        for (Iterator iter2 = pedidoDAO.buscarPorCliente(cliente).iterator(); iter2.hasNext(); ) {
          Pedido pedido = (Pedido) iter2.next();
          out.print(">|    Pedido do dia : ");
          out.println(df.format(pedido.getDataEmissao()));

          for (Iterator  iter3 = pedido.getItems().iterator();  iter3.hasNext(); ) {
            ItemPedido item = (ItemPedido) iter3.next();
            out.print(">|      ");
            out.print(item.getQuatidade());
            out.print(" ");
            out.print(item.getItem());
            out.print(" = ");
            out.println(nf.format(item.getTotal()));
          }
        }
      }
      out.println(">-----------");


    }
    catch (Exception ex) {
      System.err.println("ERRO : " + ex.getMessage());
      System.exit( -1);
    }
  }

  /** @link dependency */
  /*# DAOFactory lnkDAOFactory; */

  /** @link dependency */
  /*# PedidoDAO lnkPedidoDAO; */

  /** @link dependency */
  /*# ClienteDAO lnkClienteDAO; */
}
