package xyz.danielcortes.controllers.autor;

import javax.swing.JOptionPane;
import xyz.danielcortes.models.Autor;
import xyz.danielcortes.repository.AutorRepository;
import xyz.danielcortes.views.autor.AutorCreatePanel;

public class AutorCreateController {

  private AutorCreatePanel view;
  private AutorRepository autorRepository;

  public AutorCreateController(AutorCreatePanel view) {
    this.view = view;
    this.autorRepository = new AutorRepository();
    this.setupListeners();
  }

  private void setupListeners() {
    this.view.getApellidoMaternoField().addActionListener(e -> save());
    this.view.getGuardarButton().addActionListener(e -> save());
  }

  private void save() {
    String nombre = view.getNombreField().getText();
    if (!validateNombre(nombre)) return;
    String apellidoPaterno = view.getApellidoPaternoField().getText();
    if (!validateApellidoPaterno(apellidoPaterno)) return;
    String apellidoMaterno = view.getApellidoMaternoField().getText();
    if (!validateApellidoMaterno(apellidoMaterno)) return;

    Autor autor = new Autor();
    autor.setNombre(nombre);
    autor.setApellidoPaterno(apellidoPaterno);
    autor.setApellidoMaterno(apellidoMaterno);

    autorRepository.save(autor);

    this.view.getNombreField().setText("");
    this.view.getApellidoPaternoField().setText("");
    this.view.getApellidoMaternoField().setText("");
    this.view.getNombreField().requestFocus();
  }

  private boolean validateNombre(String nombre) {
    if (nombre == null) {
      JOptionPane.showMessageDialog(
          this.view.getContentPane(),
          "El nombre es nulo",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    } else if (nombre.isEmpty()) {
      JOptionPane.showMessageDialog(
          this.view.getContentPane(),
          "El nombre esta vacío",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    }
    return true;
  }

  private boolean validateApellidoPaterno(String apellidoPaterno) {
    if (apellidoPaterno == null) {
      JOptionPane.showMessageDialog(
          this.view.getContentPane(),
          "El apellido paterno es nulo",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    } else if (apellidoPaterno.isEmpty()) {
      JOptionPane.showMessageDialog(
          this.view.getContentPane(),
          "El apellido paterno esta vacío",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    }
    return true;
  }

  private boolean validateApellidoMaterno(String apellidoMaterno) {
    if (apellidoMaterno == null) {
      JOptionPane.showMessageDialog(
          this.view.getContentPane(),
          "El apellido materno es nulo",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    } else if (apellidoMaterno.isEmpty()) {
      JOptionPane.showMessageDialog(
          this.view.getContentPane(),
          "El apellido materno esta vacío",
          "Error",
          JOptionPane.ERROR_MESSAGE);
      return false;
    }
    return true;
  }

  public AutorCreatePanel getView() {
    return this.view;
  }
}
