package br.com.sonic.gui;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import br.com.sonic.dao.IgrejaDAO;
import br.com.sonic.dao.UsuarioDAO;
import br.com.sonic.domain.Igreja;
import br.com.sonic.domain.TipoUsuario;
import br.com.sonic.domain.Usuario;

@SuppressWarnings("deprecation")
public class AlterarUsuarioGUI extends AbstractGUI{

	private static final long serialVersionUID = 1L;
	
	public String[] labels;
	
	public JTextField inputNome;
	public JTextField inputLogin;
	public JTextField inputEmail;
	public JPasswordField inputSenha;
	public JComboBox<TipoUsuario> comboTipoUsuario;
	public JList<Igreja> listIgrejas;
	public DefaultListModel<Igreja> modelIgreja;

	public Usuario usuario;
	
	public JButton botaoAlterar;
	public JButton botaoCancelar;
	
	
	public AlterarUsuarioGUI(Usuario usuarioAtual) {
		super("Atualização de Usuario", 400, 300);
		this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setResizable(true);
		init(usuarioAtual);
		criarActions();
		adicionarElementosNoPainel();
	}
	
	public void criarActions() {
		ActionListener acaoBotaoCadastrar = new ActionListener() {			
			public void actionPerformed(ActionEvent e) {
				if (!erros.isEmpty()) {
					String msg = "";
					for (String erro : erros)
						msg += erro+"\n\n";
					JOptionPane.showMessageDialog(null, msg);
				}else {
					if(!new UsuarioDAO().buscarUsuarioLogin(inputLogin.getText().trim())){
						JOptionPane.showMessageDialog(null, "Usuario ja existe no sistema");
					} else if(!new UsuarioDAO().buscarUsuarioEmail(inputEmail.getText().trim())){
							JOptionPane.showMessageDialog(null, "E-mail ja existe no sistema");
					} else {
						
						usuario.setNome(inputNome.getText().trim());
						usuario.setEmail(inputEmail.getText().trim());
						usuario.setLogin(inputLogin.getText().trim());
						usuario.setSenha(inputSenha.getText().trim());
						usuario.setTipo( (TipoUsuario) comboTipoUsuario.getSelectedItem());
						usuario.setIgrejas(listIgrejas.getSelectedValuesList());
						
						new UsuarioDAO().update(usuario);
						
						sair();
						
						JOptionPane.showMessageDialog(null, "Usuario Cadastrado com sucesso!");
					}
				}
			}
		};
		botaoAlterar.addActionListener(acaoBotaoCadastrar);
		ActionListener acaoBotaoCancelar = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				sair();
			}
		};
		botaoCancelar.addActionListener(acaoBotaoCancelar);
	}
	
	public void adicionarElementosNoPainel() {
		JTextField inputs[] = {inputNome, inputEmail, inputLogin, inputSenha};
		for (int i = 0; i < labels.length; i++) {
			add(new JLabel(labels[i]), inputs[i]);
		}
		
		add(new JLabel("Tipo Usuario:"), comboTipoUsuario);
		add(new JLabel("Igrejas:"), listIgrejas);
		
		add(botaoAlterar, botaoCancelar);
	}
	
	public void init(Usuario usuarioAtual) {
		labels = new String[]{"Nome:", "E-Mail:", "Login:", "Senha:"};
		
		usuario = usuarioAtual;
		
		inputNome = new JTextField();
		inputNome.setFont(new Font(Font.SERIF, Font.BOLD, 14));
		inputNome.setText(usuarioAtual.getNome());
		
		inputEmail = new JTextField();
		inputEmail.setFont(new Font(Font.SERIF, Font.BOLD, 14));
		inputEmail.setText(usuarioAtual.getEmail());
		
		inputLogin = new JTextField();
		inputLogin.setFont(new Font(Font.SERIF, Font.BOLD, 14));
		inputLogin.setText(usuarioAtual.getLogin());
		
		inputSenha = new JPasswordField();
		inputSenha.setFont(new Font(Font.SERIF, Font.BOLD, 14));
		inputSenha.setText(usuarioAtual.getSenha());
		
		comboTipoUsuario = new JComboBox<TipoUsuario>(TipoUsuario.values());
		comboTipoUsuario.setSelectedItem(usuarioAtual.getTipo());
		
		listIgrejas = new JList<Igreja>();
		modelIgreja = new DefaultListModel<Igreja>();
		for (Igreja i : new IgrejaDAO().listAll()){
			modelIgreja.addElement(i);
		}
		listIgrejas.setModel(modelIgreja);
		for(Igreja i : usuarioAtual.getIgrejas() ) {
			listIgrejas.setSelectedIndex(i.getId());
		}

		botaoAlterar = new JButton("Alterar");
		botaoAlterar.setFont(new Font(Font.SERIF, Font.BOLD, 14));
		botaoCancelar = new JButton("Cancelar");
		botaoCancelar.setFont(new Font(Font.SERIF, Font.BOLD, 14));
		
	}
	
}
