package es.pulsoft.controlador.entity;



import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/*
 Enunciado del ejercicio ORM con Hibernate - Entidad Estudiante

Objetivo:
Crear la entidad Estudiante y mapearla a la tabla correspondiente en la base de datos utilizando Hibernate. Esta entidad representará a un estudiante, con información sobre su nombre y edad.

Requisitos:

    Entidad Estudiante:
        Atributos:
            id: Clave primaria autogenerada.
            nombre: Nombre del estudiante.
            edad: Edad del estudiante.

    Operaciones:
        La clase debe estar mapeada a la tabla estudiante de la base de datos.
        Implementar un constructor por defecto y otro que permita inicializar el nombre y la edad del estudiante.
        Implementar los métodos getter y setter para los atributos id, nombre y edad.

    Representación del Estudiante:
        Sobrescribir el método toString() para que devuelva una cadena que contenga el id, nombre y edad del estudiante.

Instrucciones:

    Implementa la clase Estudiante con los atributos mencionados y mapea los datos a la base de datos utilizando anotaciones de JPA.
    Asegúrate de incluir el constructor por defecto y el constructor con parámetros.
    Añade los métodos getter y setter necesarios y sobrescribe el método toString() para representar adecuadamente al estudiante.

Notas:

    Utiliza las anotaciones de Hibernate para mapear los atributos a las columnas de la base de datos.
    Asegúrate de que la clase esté correctamente anotada como entidad con @Entity y que esté mapeada a la tabla estudiante.
 */
@Entity
@Table(name = "estudiante")
public class Estudiante {

    /**
     * Identificador único del estudiante.
     * Este campo es generado automáticamente por la base de datos.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    /**
     * Nombre del estudiante.
     */
    
    @NotBlank(message="El campo nombre no puede quedar vacio")
    @Size(min=3,max=15, message="El campo nombre tiene que tener entre 3 y 15 caracteres")
    @Column(name = "nombre")
    private String nombre;
    
    /**
     * Edad del estudiante.
     */
    
    @NotNull(message="El campo edad no puede quedar en blanco")
    @Min(value=4,message="La edad del estudiante no puede ser inferior de 4")
    @Max(value=99,message="La edad del estudiante no puede ser mayor de 99")
    @Column(name = "edad")
    private Integer edad;

    /**
     * Constructor por defecto de la clase Estudiante.
     * Requerido por JPA.
     */
    public Estudiante() {
    }

    /**
     * Constructor que inicializa un estudiante con nombre y edad.
     *
     * @param nombre El nombre del estudiante.
     * @param edad La edad del estudiante.
     */
    public Estudiante(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
    }

    /**
     * Obtiene el identificador único del estudiante.
     *
     * @return El identificador del estudiante.
     */
    public int getId() {
        return id;
    }

    /**
     * Establece el identificador único del estudiante.
     *
     * @param id El identificador del estudiante.
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * Obtiene el nombre del estudiante.
     *
     * @return El nombre del estudiante.
     */
    
    public String getNombre() {
        return nombre;
    }

    /**
     * Establece el nombre del estudiante.
     *
     * @param nombre El nombre del estudiante.
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Obtiene la edad del estudiante.
     *
     * @return La edad del estudiante.
     */
    
    public Integer getEdad() {
        return edad;
    }

    /**
     * Establece la edad del estudiante.
     *
     * @param edad La edad del estudiante.
     */
    public void setEdad(Integer edad) {
        this.edad = edad;
    }

    /**
     * Devuelve una representación en cadena de texto del objeto Estudiante.
     *
     * @return Una cadena que representa al estudiante, incluyendo su ID, nombre y edad.
     */
    @Override
    public String toString() {
        return "Estudiante \nId=" + id + "\nNombre=" + nombre + "\nEdad=" + edad;
    }

	
}
