package gerenciamento_compra;

import java.sql.Connection;
import java.sql.SQLException;

import gerenciamento_acesso.ControleAcesso;
import gerenciamento_produto.ControleProduto;
import gerenciamento_produto.Produto;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import BD.ConnectionFactory;

public class InterfaceCompra {

	public static Shell janela1;
	static Shell W_fatura;
	static Shell W_cadastro, W_login;
	static Text text1, text2, campo0, campo1, campo2, campo3, campo4;
	static List lista1, lista2, lista3, lista4, lista5;
	static boolean cont;
	static int[] v_qtde, v_preco, v_preco2;
	static String[] v_prod;
	static int n_prod;

	public void SolicitaCompra() {
		janela1 = new Shell();
		janela1.setSize(700, 700);
		janela1.setText("Lista de produtos");
		janela1.open();

		try {
			Connection con = ConnectionFactory.getConnection();
			con.close();
		} catch (SQLException e) {
			janela1.close();
			MessageBox messageBox = new MessageBox(Principal.shell, SWT.OK
					| SWT.ICON_INFORMATION);
			messageBox.setMessage("SQL nao ativada!");
			messageBox.setText("SQL");
			messageBox.open();
			return;
		}

		ControleProduto crtl_prod = new ControleProduto();
		Produto lista = crtl_prod.BuscaProduto();
		if (!lista.VerificarProduto()) {
			return;
		}
		v_prod = lista.getProduto();
		v_preco = lista.getPreco();

		n_prod = 7;
		v_qtde = new int[n_prod];
		v_preco2 = new int[n_prod];

		if (Principal.login != null) {
			Label text2 = new Label(Principal.shell, SWT.NONE);
			text2.setText("Bem vindo " + Principal.login);
			text2.setBounds(250, 60, 100, 20);
		}

		Label label1 = new Label(janela1, SWT.NONE);
		label1.setText("Produtos");
		label1.setBounds(20, 10, 70, 20);

		Label label2 = new Label(janela1, SWT.NONE);
		label2.setText("Preço/UNI");
		label2.setBounds(260, 10, 70, 20);

		Label label3 = new Label(janela1, SWT.NONE);
		label3.setText("Carrinho");
		label3.setBounds(350, 10, 70, 20);

		Label label4 = new Label(janela1, SWT.NONE);
		label4.setText("Preco/UNI");
		label4.setBounds(550, 10, 50, 20);

		Label label5 = new Label(janela1, SWT.NONE);
		label5.setText("Qtde.");
		label5.setBounds(620, 10, 50, 20);

		lista1 = new List(janela1, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL
				| SWT.V_SCROLL);
		for (int i = 0; i < n_prod; i++) {
			lista1.add("" + v_prod[i]);
		}
		lista1.setBounds(20, 30, 230, 500);

		lista2 = new List(janela1, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL
				| SWT.V_SCROLL);
		for (int i = 0; i < n_prod; i++) {
			lista2.add("" + v_preco[i]);
		}

		lista2.setBounds(260, 30, 30, 500);

		lista3 = new List(janela1, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL
				| SWT.V_SCROLL);
		lista3.setBounds(350, 30, 200, 500);

		lista4 = new List(janela1, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL
				| SWT.V_SCROLL);
		lista4.setBounds(560, 30, 30, 500);

		lista5 = new List(janela1, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL
				| SWT.V_SCROLL);
		lista5.setBounds(610, 30, 30, 500);

		Button add = new Button(janela1, SWT.NONE);
		add.setText("Adiciona");
		add.setBounds(100, 550, 100, 20);

		Button rem = new Button(janela1, SWT.NONE);
		rem.setText("Remove");
		rem.setBounds(500, 550, 100, 20);

		Button confirma = new Button(janela1, SWT.NONE);
		confirma.setText("Comprar");
		confirma.setBounds(500, 600, 100, 20);

		Button volta = new Button(janela1, SWT.NONE);
		volta.setText("Voltar");
		volta.setBounds(100, 600, 100, 20);

		Button login = new Button(janela1, SWT.NONE);
		login.setText("Login");
		login.setBounds(300, 600, 100, 20);

		SelectionAdapter logs = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				loga_usuario();
			}
		};

		SelectionAdapter adds = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				if (lista1.getSelectionCount() != 0) {
					int aux = lista3.getItemCount();
					int aux2 = lista1.getSelectionIndex();
					// o cont e um flag q indica c ja existe o item na lista
					cont = false;
					while (aux > 0) {
						String a1 = lista1.getItem(aux2);
						String a2 = lista3.getItem(aux - 1);
						if (a1.contentEquals(a2)) {
							v_qtde[aux - 1] = v_qtde[aux - 1] + 1;
							lista5.setItem(aux - 1, "" + v_qtde[aux - 1]);
							cont = true;
						}
						aux--;
					}
					if (!cont) {
						v_qtde[lista3.getItemCount()] = 1;
						v_preco2[lista3.getItemCount()] = v_preco[lista1
								.getSelectionIndex()];
						lista3.add(lista1.getSelection()[0]);
						lista4.add(lista2.getItem(lista1.getSelectionIndex()));
						lista5.add("" + 1);
					}

				}
			}
		};

		SelectionAdapter rems = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				if (lista3.getSelectionCount() != 0) {
					int pos = lista3.getSelectionIndex();
					String aux = lista5.getItem(pos);
					String aux2 = "1";
					if (!aux.contentEquals(aux2)) {

						v_qtde[pos] = v_qtde[pos] - 1;
						lista5.setItem(pos, "" + v_qtde[pos]);
					} else {
						int item = lista3.getSelectionIndex();
						lista3.remove(item);
						lista4.remove(item);
						lista5.remove(item);
						for (int i = item; i < 6; i++) {
							v_qtde[i] = v_qtde[i + 1];
							v_preco2[i] = v_preco2[i + 1];
						}
					}

				}
			}
		};

		SelectionAdapter confirmas = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				if (lista3.getItemCount() > 0) {
					if (Principal.login == null) {
						MessageBox logar = new MessageBox(janela1, SWT.OK
								| SWT.ICON_INFORMATION);
						logar.setMessage("É necessario logar para comprar");
						logar.setText("logar!");
						logar.open();
						return;
					}
					W_fatura = new Shell();
					W_fatura.setText("Ficha de fatura");
					W_fatura.setSize(700, 700);
					W_fatura.open();

					Text fichario = new Text(W_fatura, SWT.BORDER
							| SWT.V_SCROLL);
					fichario.setEditable(false);
					fichario.setText("Leia o contrato de fatura antes de "
							+ "realizar a compra \n \n blabla......"
							+ "...................................."
							+ "..................................\n"
							+ "...................................."
							+ "...................................."
							+ "....................................");
					int cont = lista3.getItemCount();
					int valor = 0;

					for (int i = 0; i < cont; i++) {
						valor = valor + (v_preco2[i] * v_qtde[i]);
					}

					Label label1 = new Label(W_fatura, SWT.NONE);
					Label label2 = new Label(W_fatura, SWT.NONE);
					Label label3 = new Label(W_fatura, SWT.NONE);
					Label label4 = new Label(W_fatura, SWT.NONE);
					Label label5 = new Label(W_fatura, SWT.NONE);

					label1.setText("Produtos");
					label2.setText("Preco/UNI");
					label3.setText("Quantidade");
					label4.setText("Sua compra voce podera pagar acessando"
							+ " em pagamentos para gerar um boteto bancario");
					label5.setText("Preco total R$ " + valor);

					label1.setBounds(20, 180, 50, 20);
					label2.setBounds(400, 180, 50, 20);
					label3.setBounds(500, 180, 70, 20);
					label4.setBounds(20, 550, 500, 20);
					label5.setBounds(450, 500, 200, 20);

					List l1 = new List(W_fatura, SWT.BORDER | SWT.V_SCROLL);
					l1.setEnabled(false);
					List l2 = new List(W_fatura, SWT.BORDER | SWT.V_SCROLL);
					l2.setEnabled(false);
					List l3 = new List(W_fatura, SWT.BORDER | SWT.V_SCROLL);
					l3.setEnabled(false);

					for (int i = 0; i < cont; i++) {
						l1.add(lista3.getItem(i));
						l2.add(lista4.getItem(i));
						l3.add(lista5.getItem(i));
					}

					l1.setBounds(20, 200, 300, 300);
					l2.setBounds(400, 200, 50, 300);
					l3.setBounds(500, 200, 50, 300);

					fichario.setBounds(20, 20, 500, 150);

					Button botao1 = new Button(W_fatura, SWT.NONE);
					botao1.setText("voltar");
					botao1.setBounds(100, 600, 100, 20);
					Button botao2 = new Button(W_fatura, SWT.NONE);
					botao2.setText("Confirmar");
					botao2.setBounds(400, 600, 100, 20);

					SelectionAdapter tipo1 = new SelectionAdapter() {
						public void widgetSelected(SelectionEvent arg0) {
							W_fatura.dispose();
						}
					};
					SelectionAdapter tipo2 = new SelectionAdapter() {
						public void widgetSelected(SelectionEvent arg0) {

							MessageBox messageBox = new MessageBox(W_fatura,
									SWT.OK | SWT.CANCEL | SWT.ICON_INFORMATION);
							messageBox.setMessage("Tem certeza"
									+ " que deseja comprar?");
							messageBox.setText("Fatura");

							if (messageBox.open() == SWT.OK) {
								ControleCompra crtl_compra = new ControleCompra();
								if (crtl_compra.EfetuaCompra(lista3, v_preco2,
										v_qtde)) {

									MessageBox ok = new MessageBox(W_fatura,
											SWT.OK | SWT.ICON_INFORMATION);
									ok.setMessage("Compra Gravada!!!");
									ok.setText("sucesso");
									ok.open();
								} else {
									MessageBox err = new MessageBox(W_fatura,
											SWT.OK | SWT.ICON_ERROR);
									err.setMessage("Erro na compra");
									err.setText("error");
									err.open();
								}

							}

						}

					};

					botao1.addSelectionListener(tipo1);
					botao2.addSelectionListener(tipo2);

				}
			}
		};

		SelectionAdapter voltas = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				janela1.close();
			}
		};

		add.addSelectionListener(adds);
		rem.addSelectionListener(rems);
		confirma.addSelectionListener(confirmas);
		volta.addSelectionListener(voltas);
		login.addSelectionListener(logs);

	}

	public void loga_usuario() {
		W_login = new Shell();
		W_login.setText("Login");
		W_login.setSize(400, 200);
		W_login.open();

		Label label1 = new Label(W_login, SWT.NONE);
		label1.setText("Login");
		label1.setBounds(50, 50, 50, 20);
		Label label2 = new Label(W_login, SWT.NONE);
		label2.setText("Senha");
		label2.setBounds(50, 80, 50, 20);

		text1 = new Text(W_login, SWT.BORDER);
		text1.setBounds(100, 50, 200, 20);
		text1.setTextLimit(8);
		text2 = new Text(W_login, SWT.BORDER);
		text2.setEchoChar('*');
		text2.setBounds(100, 80, 200, 20);
		text2.setTextLimit(5);

		Button botao1 = new Button(W_login, SWT.NONE);
		botao1.setText("Cadastra");
		botao1.setBounds(250, 130, 100, 20);
		Button botao2 = new Button(W_login, SWT.NONE);
		botao2.setText("voltar");
		botao2.setBounds(50, 130, 100, 20);
		Button botao3 = new Button(W_login, SWT.NONE);
		botao3.setText("logar");
		botao3.setBounds(150, 130, 100, 20);

		SelectionAdapter modo0 = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				W_cadastro = new Shell();
				W_cadastro.setText("Cadastro");
				W_cadastro.setSize(500, 400);
				W_cadastro.open();

				Label label0 = new Label(W_cadastro, SWT.NONE);
				label0.setText("Preencha todos os campos");
				label0.setBounds(20, 20, 200, 20);
				Label label001 = new Label(W_cadastro, SWT.NONE);
				label001.setText("Nome");
				label001.setBounds(100, 100, 50, 20);
				Label label1 = new Label(W_cadastro, SWT.NONE);
				label1.setText("Login");
				label1.setBounds(100, 130, 50, 20);
				Label label2 = new Label(W_cadastro, SWT.NONE);
				label2.setText("Senha");
				label2.setBounds(100, 160, 50, 20);
				Label label3 = new Label(W_cadastro, SWT.NONE);
				label3.setText("E-mail");
				label3.setBounds(100, 190, 50, 20);
				Label label4 = new Label(W_cadastro, SWT.NONE);
				label4.setText("endereco");
				label4.setBounds(100, 220, 50, 20);

				campo0 = new Text(W_cadastro, SWT.BORDER);
				campo0.setBounds(150, 100, 200, 20);
				campo0.setTextLimit(255);
				campo1 = new Text(W_cadastro, SWT.BORDER);
				campo1.setBounds(150, 130, 200, 20);
				campo1.setTextLimit(8);
				campo2 = new Text(W_cadastro, SWT.BORDER);
				campo2.setBounds(150, 160, 200, 20);
				campo2.setTextLimit(5);
				campo2.setEchoChar('*');
				campo3 = new Text(W_cadastro, SWT.BORDER);
				campo3.setBounds(150, 190, 200, 20);
				campo3.setTextLimit(30);
				campo4 = new Text(W_cadastro, SWT.BORDER);
				campo4.setBounds(150, 220, 200, 20);
				campo4.setTextLimit(20);

				Button botao1 = new Button(W_cadastro, SWT.NONE);
				botao1.setText("voltar");
				botao1.setBounds(100, 250, 100, 20);
				Button botao2 = new Button(W_cadastro, SWT.NONE);
				botao2.setText("cadastrar");
				botao2.setBounds(200, 250, 100, 20);

				SelectionAdapter tipo0 = new SelectionAdapter() {
					public void widgetSelected(SelectionEvent arg0) {
						W_cadastro.dispose();
					}
				};
				SelectionAdapter tipo1 = new SelectionAdapter() {
					public void widgetSelected(SelectionEvent arg0) {

						String aux0 = campo0.getText();
						String aux1 = campo1.getText();
						String aux2 = campo2.getText();
						String aux3 = campo3.getText();
						String aux4 = campo4.getText();

						ControleAcesso novo = new ControleAcesso();
						try {
							if (novo.CadastraCliente(aux0, aux1, aux2, aux3,
									aux4)) {
								MessageBox messageBox = new MessageBox(
										W_cadastro, SWT.OK
												| SWT.ICON_INFORMATION);
								messageBox
										.setMessage("Cadastrado com sucesso!!!");
								messageBox.setText("Cadastro");
								messageBox.open();
								W_cadastro.dispose();

							} else {
								MessageBox messageBox = new MessageBox(
										W_cadastro, SWT.OK
												| SWT.ICON_INFORMATION);
								messageBox
										.setMessage("Verifique se nao tem campo(s)"
												+ "vazios ou tente outro login");
								messageBox.setText("Cadastro");
								messageBox.open();
							}
						} catch (SQLException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}

					}
				};

				botao1.addSelectionListener(tipo0);
				botao2.addSelectionListener(tipo1);
			}
		};
		SelectionAdapter modo1 = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				W_login.dispose();
			}
		};
		SelectionAdapter modo2 = new SelectionAdapter() {
			public void widgetSelected(SelectionEvent arg0) {
				// verifica sql....
				ControleCompra loga = new ControleCompra();

				String aux1 = text1.getText();
				String aux2 = text2.getText();

				if (loga.VerificaLogin(aux1, aux2)) {
					MessageBox messageBox = new MessageBox(W_login, SWT.OK
							| SWT.ICON_INFORMATION);
					messageBox.setMessage("Logado com sucesso!!!");
					messageBox.setText("Login");
					messageBox.open();					
					W_login.close();
				} else {
					MessageBox messageBox = new MessageBox(W_login, SWT.OK
							| SWT.ICON_INFORMATION);
					messageBox.setMessage("Cliente invalido!");
					messageBox.setText("Login");
					messageBox.open();
				}
			}
		};

		botao1.addSelectionListener(modo0);
		botao2.addSelectionListener(modo1);
		botao3.addSelectionListener(modo2);
	}

}
