const bcrypt = require("bcryptjs");
const User = require("../models/User");
const Student = require("../models/Student");
const jwt = require("jsonwebtoken");
const JWT_secret = "Cantileverlabs";
const messagebird = require("messagebird")("llVKD53ve6QRpbCKOHzWBADaS", null, [
  "ENABLE_CONVERSATIONSAPI_WHATSAPP_SANDBOX",
]);
const nodemailer = require("nodemailer");
const smtpTransport = require("nodemailer-smtp-transport");

// -------------------------------------------- mail transporter -----------------------------------------

var transport = nodemailer.createTransport(
  smtpTransport({
    host: `${process.env.HOST}`, //`${process.env.HOST}`
    port: 465,
    auth: {
      user: `${process.env.EMAIL}`, //`${process.env.EMAIL}`
      pass: `${process.env.PASS}`, //`${process.env.PASS}`
    },
  })
);

// -------------------------------------------- mail transporter -----------------------------------------

module.exports.Protected = async (req, res, next) => {
  res.send("Hello User");
};
module.exports.postSignup = async (req, res, next) => {
  try {
    //we need firstName , lastName , email , password as input
    let firstName = req.body.firstName || " ";
    let lastName = req.body.lastName || " ";
    const { sending_company_email, email, password, subject } = req.body;
    let user = await User.findOne({ email: email });
    if (user) {
      res.json({
        message: "User already exist",
        type: "error",
      });
    } else {
      const email_otp = Math.floor(100000 + Math.random() * 900000);
      console.log("otp", email_otp);
      const hashedPass = await bcrypt.hash(password, 12);
      user = new User({
        firstName: firstName,
        lastName: lastName,
        email: email,
        password: hashedPass,
        isAdmin: false,
        // email_otp,
      });
      user = await user.save();
      await Student.deleteOne({ user: user._id });
      let student = new Student({
        user: user._id,
      });
      student = await student.save();
      user.student = student._id;
      await user.save();
      // const message = {
      //   from: `${sending_company_email}`, // Sender address
      //   to: `${email}`, // List of recipients
      //   subject: `${subject}`, // Subject line
      //   html: '', // design html for email message.
      // };
      // transport.sendMail(message, function (err, info) {
      //   if (err) {
      //     console.log(err);
      //   } else {
      //     console.log(info);
      //   }
      // });
      res.json({
        message: "You Are Registered, Please Login",
        type: "success",
      });
    }
  } catch (err) {
    console.log(err);
  }
};

module.exports.verfiyemail = async (req, res, next) => {
  const { email, otp } = req.body;
  try {
    let user = await User.findOne({ email: email });
    if (user) {
      const isMatched = await (user.email_otp == otp ? true : false);
      if (isMatched) {
        if (!user.isVerified) {
          user.isVerified = true;
          await user.save();
          res.json({
            message: "User Verified, Please Login",
          });
        } else {
          res.json({
            message: "User Already Verified, Please Login",
          });
        }
      } else {
        res.json({
          message: "OTP Doesn't Matched!",
          type: "error",
        });
      }
    } else {
      res.json({
        message: "No user with this email exists",
        type: "error",
      });
    }
  } catch {
    (err) => {
      console.log(err);
    };
  }
};

module.exports.postSignin = async (req, res, next) => {
  try {
    //we need email and password as input
    let email = req.body.email;
    let password = req.body.password;
    let user = await User.findOne({ email: email });
    if (user) {
      const isMatched = await bcrypt.compare(password, user.password);
      if (isMatched) {
        const token = jwt.sign({ _id: user._id }, JWT_secret);
        res.json({
          token: token,
        });
      } else {
        res.json({
          message: "email and password doesn't match",
          type: "error",
        });
      }
    } else {
      res.json({
        message: "No user with this email exists",
        type: "error",
      });
    }
  } catch (err) {
    console.log(err);
  }
};

//                                     Phone verification Starts.
// -----------------------------------------------------------------------------------------------

module.exports.sendOTP = (req, res, next) => {
  //uNNYosMopvvCW9RTR1tRWJmYC test
  //llVKD53ve6QRpbCKOHzWBADaS live
  const { phoneNumber } = req.body;
  try {
    if (!phoneNumber) {
      res.status(422).json({ message: "Please Add All Required Fields" });
      return;
    } else {
      messagebird.verify.create(
        phoneNumber,
        {
          template: "Your verification code is %token",
        },
        function (err, response) {
          if (err) {
            console.log(err);
            res.status(422).json({ message: err.errors[0].description });
          } else {
            console.log(response);
            res.json({ id: response.id });
          }
        }
      );
    }
  } catch (err) {
    console.log(err);
  }
};

module.exports.getOTP = (req, res, next) => {
  try {
    const { id, otp } = req.body;
    messagebird.verify.verify(id, otp, function (err, response) {
      if (err) {
        console.log({ error: err.errors[0].description, id: id });
        res.json({ error: err.errors[0].description, id: id });
      } else {
        console.log(response);
        res.json({ message: "Code Verified" });
      }
    });
  } catch (err) {
    console.log(err);
  }
};
//                                     Phone verification End.
// -----------------------------------------------------------------------------------------------

// -----------------------------------------------------------------------------------------------
//                                      Forgot password Starts

module.exports.forgotpassword = async (req, res, next) => {
  const { email, link, sending_company_email, subject } = req.body;
  //link = https://cantileverlabs.herokuapp.com/resetpassword/:id/:token
  try {
    await User.findOne({ email }).then((user) => {
      if (!user) {
        res.status(404).json({ error: "User not found with this Email" });
        return;
      } else {
        const payload = {
          email: user.email,
          _id: user._id,
        };
        const secret = JWT_secret + user.password;
        const token = jwt.sign(payload, secret, { expiresIn: "10m" });
        User.findByIdAndUpdate(user._id, {
          $set: { passwordResetToken: token },
        })
          .then((data) => {
            const reset_link = `${link}/${user._id}/${token}`;
            const message = {
              from: `${sending_company_email}`, // Sender address
              to: `${user.email}`, // List of recipients
              subject: `${subject}`, // Subject line
              html: `
              <!doctype html>
              <html lang="en-US">
              
              <head>
                  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
                  <title>Reset Password Email Template</title>
                  <meta name="description" content="Reset Password Email Template.">
                  <style type="text/css">
                      a:hover {text-decoration: underline !important;}
                  </style>
              </head>
              
              <body marginheight="0" topmargin="0" marginwidth="0" style="margin: 0px; background-color: #f2f3f8;" leftmargin="0">
                  <!--100% body table-->
                  <table cellspacing="0" border="0" cellpadding="0" width="100%" bgcolor="#f2f3f8"
                      style="@import url(https://fonts.googleapis.com/css?family=Rubik:300,400,500,700|Open+Sans:300,400,600,700); font-family: 'Open Sans', sans-serif;">
                      <tr>
                          <td>
                              <table style="background-color: #f2f3f8; max-width:670px;  margin:0 auto;" width="100%" border="0"
                                  align="center" cellpadding="0" cellspacing="0">
                                  <tr>
                                      <td style="height:80px;">&nbsp;</td>
                                  </tr>
                                  <tr>
                                      <td style="text-align:center;">
                                       
                                      </td>
                                  </tr>
                                  <tr>
                                      <td style="height:20px;">&nbsp;</td>
                                  </tr>
                                  <tr>
                                      <td>
                                          <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0"
                                              style="max-width:670px;background:#fff; border-radius:3px; text-align:center;-webkit-box-shadow:0 6px 18px 0 rgba(0,0,0,.06);-moz-box-shadow:0 6px 18px 0 rgba(0,0,0,.06);box-shadow:0 6px 18px 0 rgba(0,0,0,.06);">
                                              <tr>
                                                  <td style="height:40px;">&nbsp;</td>
                                              </tr>
                                              <tr>
                                                  <td style="padding:0 35px;">
                                             <a href="https://cantileverlabs.com" title="logo" target="_blank">
                                        <img width="80" height="80" 
                                        src="https://media-exp1.licdn.com/dms/image/C510BAQEgcV3sgE1PIA/company-logo_200_200/0/1552289011007?e=2159024400&v=beta&t=FO8loLVwC5qoHmYkk-gR-mv7vC36LPG17yZkxOFl6Go" style="margin:40px" title="logo" alt="logo">
                                        </a>         <h1 style="color:#1e1e2d; font-weight:500; margin:0;font-size:32px;font-family:'Rubik',sans-serif;">You have
                                                          requested to reset your password</h1>
                                                      <span
                                                          style="display:inline-block; vertical-align:middle; margin:29px 0 26px; border-bottom:1px solid #cecece; width:100px;"></span>
                                                      <p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
                                                          We cannot simply send you your old password. A unique link to reset your
                                                          password has been generated for you. To reset your password, click the
                                                          following link and follow the instructions.
                                                      </p>
                                                      <a href=${reset_link}
                                                          style="background:#ffc600;text-decoration:none !important; font-weight:500; margin-top:35px; color:#111;text-transform:uppercase; font-size:14px;padding:10px 24px;display:inline-block;border-radius:50px;">Reset
                                                          Password</a>

                                                      <p style="color:#455056; margin:"30px";font-size:15px;line-height:24px; margin:0;">
                                                         Facing any issue? Write us at
<p style="color:#455056; font-size:15px;line-height:24px; margin:0;"><a href="mailto:info@cantileverlabs.com">info@cantileverlabs.com</a></P>
<img width="300" height="80" 
                                        src="data:image/png;base64,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" 
                                        title="logo" alt="logo">

<p style="color:#455056; font-size:15px;line-height:24px; margin:0;">
 <a href="https://www.cantileverlabs.com/policies#privacy" style="text-decoration:none;border-right:1px solid;padding-right:10px">Privacy Policy</a>
<a href="https://www.cantileverlabs.com/policies#privacy" style="text-decoration:none ; border-right:1px solid;padding-right:10px;margin-left:5px">Terms Of Use</a>
<a href="mailto:infi@cantileverlabs.com" style="text-decoration:none ;margin-left:5px">Contact Us</a>
                                                      </p>
                                                      </p>
                                                  </td>
                                              </tr>
                                              <tr>
                                                  <td style="height:40px;">&nbsp;</td>
                                              </tr>
                                          </table>
                                      </td>
                                  <tr>
                                      <td style="height:20px;">&nbsp;</td>
                                  </tr>
                                  <tr>
                                      <td style="text-align:center;">
                                      <div class="reset-logo2-J ">
                                      <img src="./images/Icon material-copyright.png" alt="">
                                      <span class="light-copyright-J">copyright <span class="bold-copyright-J">2018 Cantilever Labs</span></span>
                                  </div>
                                      </td>
                                  </tr>

                                  <tr>
                                      <td style="height:80px;">&nbsp;</td>
                                  </tr>
                              </table>
                          </td>
                      </tr>
                  </table>
                  <!--/100% body table-->
              </body>
              
              </html>
              `, // design html for email message.
            };
            transport.sendMail(message, function (err, info) {
              if (err) {
                console.log(err);
              } else {
                console.log(info);
              }
            });
            res.status(200).json({
              message: "Link is Active for 10 mins",
              reset_link,
            });
          })
          .catch((err) => {
            console.log(err);
          });
      }
    });
  } catch {
    (error) => {
      console.log("Error from forgot pass", error);
    };
  }
};
module.exports.resetpassword = async (req, res, next) => {
  const { _id, token } = req.params;
  const { password } = req.body;
  try {
    let user = await User.findById({ _id });
    if (!user) {
      res.json({ error: "User not Found or WrongId" });
      return;
    } else {
      const secret = JWT_secret + user.password;
      const user_token = user.passwordResetToken;
      const payload = jwt.verify(token, secret);
      const hashedPass = await bcrypt.hash(password, 12);
      if (token == user_token) {
        user.password = hashedPass;
        await user
          .save()
          .then((ok) => {
            res.header("Access-Control-Allow-Origin", "*");
            res.header("Access-Control-Allow-Headers", "*");
            res.json({ message: "Password Updated!" });
          })
          .catch((err) => {
            console.log("Error in save", err);
          });
      } else {
        res.status(422).json({ error: "Either Token not found or Expired!" });
        return;
      }
    }
  } catch {
    (err) => {
      console.log("error from try catch resetpass", err);
    };
  }
};

//                                     Forgot password Ends

//                                      Email verification Ends

// -----------------------------------------------------------------------------------------------

module.exports.checkProtected = (req, res, next) => {
  console.log(req.user);
  res.json({
    message: "Protected",
    user: req.user,
  });
};