class Usuario {
    constructor(
        id, nombre, apellido, matricula, contrasena, correo,
        nacionalidad, tipoSangre, fecha_nacimiento, curp,
        rol, idCarrera, inscrito
    ) {
        this.id = id;
        this.nombre = nombre;
        this.apellido = apellido;
        this.matricula = matricula;
        this.contrasena = contrasena || ''; // Valor predeterminado para contrasena
        this.correo = correo;
        this.nacionalidad = nacionalidad;
        this.tipoSangre = tipoSangre;
        this.fecha_nacimiento = fecha_nacimiento;
        this.curp = curp;
        this.rol = rol;
        this.idCarrera = idCarrera;
        this.inscrito = inscrito;
    }

    // Getters
    getId() {
        return this.id;
    }

    getNombre() {
        return this.nombre;
    }

    getApellido() {
        return this.apellido;
    }

    getMatricula() {
        return this.matricula;
    }

    getContrasena() {
        return this.contrasena;
    }

    getCorreo() {
        return this.correo;
    }

    getNacionalidad() {
        return this.nacionalidad;
    }

    getTipoSangre() {
        return this.tipoSangre;
    }

    getFecha_nacimiento() {
        return this.fecha_nacimiento;
    }

    getCurp() {
        return this.curp;
    }

    getRol() {
        return this.rol;
    }

    getIdCarrera() {
        return this.idCarrera;
    }

    getInscrito() {
        return this.inscrito;
    }

    // Setters
    setId(id) {
        this.id = id;
    }

    setNombre(nombre) {
        this.nombre = nombre;
    }

    setApellido(apellido) {
        this.apellido = apellido;
    }

    setMatricula(matricula) {
        this.matricula = matricula;
    }

    setContrasena(contrasena) {
        this.contrasena = contrasena;
    }

    setCorreo(correo) {
        this.correo = correo;
    }

    setNacionalidad(nacionalidad) {
        this.nacionalidad = nacionalidad;
    }

    setTipoSangre(tipoSangre) {
        this.tipoSangre = tipoSangre;
    }

    setFecha_nacimiento(fecha_nacimiento) {
        this.fecha_nacimiento = fecha_nacimiento;
    }

    setCurp(curp) {
        this.curp = curp;
    }

    setRol(rol) {
        this.rol = rol;
    }

    setIdCarrera(idCarrera) {
        this.idCarrera = idCarrera;
    }

    setInscrito(inscrito) {
        this.inscrito = inscrito;
    }

    crearToken() {
        const CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        let token = '';
        for (let i = 0; i < 15; i++) {
            const index = Math.floor(Math.random() * CHARACTERS.length);
            token += CHARACTERS.charAt(index);
        }
        return token;
    }
}

export default Usuario;