'use strict';
import { Schema, model, connect } from 'mongoose';
var sha1 = require('sha1');
var md5 = require('md5');
var adminUserSchema = new Schema(
    {
        first_name: { 
            type: String, 
            trim:true 
        },
        last_name: { 
            type: String, 
            trim:true 
        },        
        email: { 
            type: String, 
            trim:true 
        },
        password: { 
            type: String 
        },
        phone_number: {
            type: String
        },
        profile_pic: {
            type: String
        },       
        salt_key: { 
            type: String 
        },        
        is_active:{
            type: Boolean,        
            default: true
        },    
        is_super_admin:{
            type: Boolean,
            default:false
        }, 
        is_deleted:{
            type: Boolean,
            default:false
        },               
        auth_token:{ 
            type: String 
        },
        reset_password_token:{ 
            type: String 
        },
        permissions: {
            type: Object,
            default: {
                appointments: { view: false, create: false, edit: false, delete: false },
                blogs: { view: false, create: false, edit: false, delete: false },
                category_management: { view: false, create: false, edit: false, delete: false },
                dashboard: { view: false },
                faqs: { view: false, create: false, edit: false, delete: false },
                help_and_support: { view: false, create: false, edit: false, delete: false },
                language_management: { view: false, create: false, edit: false, delete: false },
                magzines: { view: false, create: false, edit: false, delete: false },
                newsletter_subscriber: { view: false, create: false, edit: false, delete: false },
                settings: { view: false, edit: false },
                testimonials: { view: false, create: false, edit: false, delete: false },
                users: { view: false, create: false, edit: false, delete: false }
            }
        }
    },
    {
        timestamps: true,
    },
);

//pre save hook on mongodb
adminUserSchema.pre('save', async function save(next) {
    if (!this.isModified('password')) return next();
    try {  
        const salt = await sha1(`${this.email}${new Date()}`) 
        const password = await md5(`${this.password}`) 
        this.password = await md5(`${password}${salt}`) 
        this.salt_key = salt;
        return next();
    } catch (err) {
        return next(err);
    }
});

adminUserSchema.methods.passwordCompare = async function (saltKey, savedPassword, requestedPassword) {

    const password = await md5(`${requestedPassword}`)
    const encryptedPassword = await md5(`${password}${saltKey}`)   
    return (encryptedPassword == savedPassword)?true:false    
}

adminUserSchema.methods.generateToken = async function (saltKey) {

    return md5(`${saltKey}-${new Date()}`);  
}

adminUserSchema.methods.generateResetPasswordToken = async function (saltKey) {

    return md5(`${saltKey}-${new Date()}`);  
}

adminUserSchema.methods.encryptPassword = async function (userData, password) { 
    const MD5Password = await md5(`${password}`) 
    const encryptedPassword = await md5(`${MD5Password}${userData.salt_key}`)    
    return encryptedPassword;  
}
let Admin = model('Admin', adminUserSchema)
module.exports = {Admin, adminUserSchema}
