const Course = require('../models/Course') ;
const CourseType = require('../models/CourseType') ;
const User = require('../models/User') ;

module.exports.postAddCourse = async (req , res , next) => {
    try
    {
        //we will take input as name , mentor and totalLectures
        let name = req.body.name ;
        let mentor = req.body.mentor ;
        let totalLectures = req.body.totalLectures ;
        let route = req.body.route
        if(name)
        {
            name = name.trim() ;
        }
        if(mentor)
        {
            mentor = mentor.trim() ;
        }
        if(route)
        {
            route = route.trim() ;
        }
        if(totalLectures)
        {
            totalLectures = Number(totalLectures) ;
        }

        let course = new Course({
            name : name ,
            mentor : mentor ,
            totalLectures : totalLectures ,
            route : route
        }) ; ;

        course = await course.save() ;

        //tier 1
        let tier1 = new CourseType({
            name : course.name ,
            amount : 7000 ,
            tier : 1 ,
            course : course._id 
        })
        tier1 = await tier1.save() ;

        //tier 2
        let tier2 = new CourseType({
            name : course.name ,
            amount : 5000 ,
            tier : 2 ,
            course : course._id 
        })
        tier2 =await tier2.save() ;

        //tier 3
        let tier3 = new CourseType({
            name : course.name ,
            amount : 3000 ,
            tier : 3 ,
            course : course._id 
        })
        tier3 = await tier3.save() ;

        course.types.tier1 = tier1 ;
        course.types.tier2 = tier2 ;
        course.types.tier3 = tier3 ;

        await course.save() ;

        res.json({
            success: "Successfully created"
        })
    }  
    catch(err)
    {
        console.log(err);
        res.json({
            error : err
        })
    }
}

module.exports.getAllCourses = async (req , res , next) => {
    try
    {
        //we will be getting all the courses here
        const courses = await Course.find().populate("types.tier1").populate("types.tier2").populate("types.tier3") ;
        res.json({
            courses : courses
        })
    }
    catch
    {
        res.json({
            error : "error" 
        })
    }
}

module.exports.getMeetSchedule = async (req , res , next) => {
    try
    {
        //we need courseTypeId as input
        const courseId = req.body.courseId ;

        const course = await CourseType.findById(courseId).populate("course") ;
        res.json({
            courses : course
        })
    }
    catch(err)
    {
        res.json({
            error : "error" 
        })
    }
}

module.exports.getSingleParCourse = async (req , res , next) => {
    try{
        const parCourseId = req.body.parCourseId ;
        console.log(parCourseId) ;
        const course = await Course.findById(parCourseId).populate("types.tier1").populate("types.tier2").populate("types.tier3") ;

        res.json({
            course : course
        })
    }
    catch(err)
    {
        res.json({
            error : "error" 
        })
    }
}

module.exports.getTierCourse = async (req , res , next) => {
    try{
        //we need courseTypeId as input
        const courseId = req.body.courseId ;

        const course = await CourseType.findById(courseId).populate("course") ;
        res.json({
            course : course
        })

    }
    catch(err)
    {
        res.json({
            error : "error"
        })
    }
}

module.exports.getFromRoute = async (req , res , next) => {
    try{
        const route = req.query.route ;
        const course = await Course.findOne({route :route}).populate("types.tier1").populate("types.tier2").populate("types.tier3") ;
        console.log(course);
        res.json({
            course : course
        })
    }
    catch(err)
    {
        res.json({
            error : "error" 
        })
    }
}

module.exports.addClick = async (req , res , next) => {
    try
    {
        const route = req.body.route ;
        const userId = req.user._id ;
        let user = await User.findById(userId) ;
        let clicked = {...user.clicked} ;
        if(!clicked[route])
        {
            clicked[route] = 0 ;
        }
        clicked[route] = clicked[route] + 1 ;
        user.clicked = clicked ;
        await user.save() ;
        res.json({
            data : "added click"
        }) ;
    }
    catch(err)
    {
        res.json({
            error : err 
        })
    }
}