var mongoose = require('mongoose');
var mongooseUniqueValidator = require('mongoose-unique-validator');
var Schema = mongoose.Schema;
var userSchema = new Schema({
    name: {type: String, required: true, unique: true},
    role: {type: String, required: true},
    password: {type: String, select: false},
    tokens: [{
        userAgent: {type: String},
        token: {type: String},
        os: {type: String},
        browser: {type: String},
        device: {type: String},
        os_version: {type: String},
        browser_version: {type: String},
        ip: {type: String},
        lastLogin: {type: Date},
        birthdate: {type: Date},
    }],
    testimonial: {type :String},//Para la landing page, sera como una review del sitio
    email: {type: String, required: true, unique: true},
    description: {type: String},
    direction: {type: String},
    city: {type: String},
    avatar: {type: String},
    background: {type: String},
    attributes: {
        height: {type: Number},
        weight: {type: Number},
        gender: {type: String},//Home, Dona, Altres -->com a mínim aquestes 3 opcions, més endavant tenim el debat de com s'enfoca
        age: {type: Number}
    },
    publications: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'publicationModel'
    }],
    runs: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'runModel'
    }],
    totalkm: {type: Number},
    conversations: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'conversationModel'
    }],
    diets: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'dietModel'
    }],
    trainers: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'userModel'
    }],
    routines: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'routineModel'
    }],// trainermodel
    disciplines : [{
        name: {type: String}
    }],
    specialties : [{
        name: {type: String}
    }],
    clients: [{
      client: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'userModel'
      },
      petitionMessage: {type: String},
      date: {type: Date}
    }],
    clientsPetitions: [{
      clientid: {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'userModel'
      },
      message: {type: String},
      state: {type: String}//pendent, accepted, declined
    }],
    valoration:  {type:String}, //La media de todas las valoraciones
    valorations: [{
      clientid: {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'userModel'
      },
      date: {type: Date},
      message: {type: String},//missatge de valoració
      value: {type: Number}//per exemple sistema d'estrelles sobre 5
    }],//end of trainermodel
    points: {
        total: {type: Number},
        history: [{
            concept: {type: String},
            date: {type: Date},
            value: {type: Number}
        }]
    },
    marks: [{
        title: {type: String},
        unit: {type: String},//si són kg, km
        best: {
            date: {type: Date},
            value: {type: String}
        },
        days:[{
            date: {type: Date},
            value: {type: String}
        }]
    }],
    notifications: [{
        state: {type: String},//viewed, pendent
        message: {type: String},
        link: {type: String},//aquí oju, a la app i a la web calen links diferents, però ho podem fer posant sempre a la app i a la web el prefix del link (#!/app) o (#/app/), i després afegint-hi la pàgina on volem enviar el routing, per exemple (dashboard)
        icon: {type: String},
        date: {type: Date},
        dateviewed: {type: Date}
    }],
    followers: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'userModel'
    }],
    following: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'userModel'
    }],
    google: {
        id: {type: String},
        token: {type: String},
        email: {type: String},
        name: {type: String},
    },
    twitter: {
        id: {type: String},
        token: {type: String},
        email: {type: String},
        name: {type: String},
    }
});
userSchema.plugin(mongooseUniqueValidator);
module.exports = mongoose.model('userModel', userSchema);
