package es.pulsoft.controlador.entity;

import java.time.LocalDate;
import javax.persistence.*;

/*
Enunciado: Relación Estudiante-Curso

Crea una clase CursoEstudiante que mapea la relación muchos a muchos entre Estudiante y Curso, representando la inscripción de un estudiante en un curso. La clase debe contener:

    Atributos:
        estudiante_id: Relación ManyToOne con la entidad Estudiante.
        curso_id: Relación ManyToOne con la entidad Curso.
        fecha_inscripcion: Fecha de inscripción del estudiante en el curso.

    La clave primaria debe ser compuesta por estudiante_id y curso_id.

La tabla resultante será curso_estudiante, con las columnas estudiante_id, curso_id y fecha_inscripcion.
 */
@Entity
@Table(name = "curso_estudiante")
public class CursoEstudiante {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id")
	private int id;
	
    /**
     * Identificador del estudiante que se inscribe en un curso.
     * Este campo está asociado con la clave primaria de la entidad Estudiante.
     * Se define como parte de la clave primaria compuesta.
     */
    
    @ManyToOne
    @JoinColumn(name = "estudiante_id", nullable = false)
    private Estudiante estudiante;

    /**
     * Identificador del curso al que el estudiante se inscribe.
     * Este campo está asociado con la clave primaria de la entidad Curso.
     * Se define como parte de la clave primaria compuesta.
     */
    
    @ManyToOne
    @JoinColumn(name = "curso_id", nullable = false)
    private Curso curso;

    /**
     * Fecha de inscripción del estudiante al curso.
     * Este campo almacena la fecha en que el estudiante se inscribe al curso.
     */
    @Column(name = "fecha_inscripcion")
    private LocalDate fechaInscripcion;

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

    /**
     * Constructor que inicializa un curso de estudiante con los datos proporcionados.
     *
     * @param estudiante      El estudiante que se inscribe en el curso.
     * @param curso          El curso en el que el estudiante se inscribe.
     * @param fechaInscripcion La fecha en la que el estudiante se inscribe al curso.
     */
    public CursoEstudiante(Estudiante estudiante, Curso curso, LocalDate fechaInscripcion) {
        this.estudiante = estudiante;
        this.curso = curso;
        this.fechaInscripcion = fechaInscripcion;
    }

    // Métodos getters y setters

    /**
     * Obtiene el estudiante asociado a esta inscripción.
     *
     * @return El estudiante inscrito.
     */
    public Estudiante getEstudiante() {
        return estudiante;
    }

    /**
     * Establece el estudiante asociado a esta inscripción.
     *
     * @param estudiante El estudiante a asignar.
     */
    public void setEstudiante(Estudiante estudiante) {
        this.estudiante = estudiante;
    }

    /**
     * Obtiene el curso asociado a esta inscripción.
     *
     * @return El curso al que el estudiante está inscrito.
     */
    public Curso getCurso() {
        return curso;
    }

    /**
     * Establece el curso asociado a esta inscripción.
     *
     * @param curso El curso al que inscribir al estudiante.
     */
    public void setCurso(Curso curso) {
        this.curso = curso;
    }

    /**
     * Obtiene la fecha de inscripción del estudiante en el curso.
     *
     * @return La fecha en la que el estudiante se inscribió al curso.
     */
    public LocalDate getFechaInscripcion() {
        return fechaInscripcion;
    }

    /**
     * Establece la fecha de inscripción del estudiante en el curso.
     *
     * @param fechaInscripcion La fecha de inscripción.
     */
    public void setFechaInscripcion(LocalDate fechaInscripcion) {
        this.fechaInscripcion = fechaInscripcion;
    }
    
    
    

    public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	/**
     * Devuelve una representación en cadena de texto del objeto CursoEstudiante,
     * mostrando los datos del estudiante, curso y la fecha de inscripción.
     *
     * @return Una cadena que representa la inscripción del estudiante en el curso.
     */
    @Override
    public String toString() {
        return "CursoEstudiante Estudiante" + estudiante + "\nCurso" + curso + "\nFecha Inscripcion="
                + fechaInscripcion;
    }
}
