import sequelize from "sequelize";
import database from "../../database";
import { hash } from "bcryptjs";

const ResetPassword = async (email: string ,token: string, password: string) => {
    
    const {hasResult , data} = await filterUser(email, token);

    if (!hasResult) {
        return { status: 404, message: "Email não encontrado" };
    }

    if(hasResult === true){
        try{
        const convertPassword: string= await hash(password,8)

        const {hasResults , datas} = await insertHasPassword(email, token ,convertPassword);

        if (datas.length === 0){
            return { status: 404, message: "Token não encontrado" };
        }

        }catch(err){
            console.log(err)
        }
    }

}
export default ResetPassword;

const filterUser = async (email : string , token: string)=>{
    const sql = `SELECT * FROM "Users"  WHERE email = '${email}' AND "resetPassword" != ''`;
    const result = await database.query(sql, { type: sequelize.QueryTypes.SELECT });
    return { hasResult: result.length > 0, data: result };
}
const insertHasPassword = async (email : string , token: string, convertPassword: string)=>{


    const sqlValida = `SELECT * FROM "Users"  WHERE email = '${email}' AND "resetPassword" = '${token}'`;
    const resultado = await database.query(sqlValida, { type: sequelize.QueryTypes.SELECT });


    const sqls = `UPDATE  "Users"  SET "passwordHash"= '${convertPassword}' , "resetPassword" = '' WHERE email= '${email}' AND "resetPassword" = '${token}'`;
    const results = await database.query(sqls, { type: sequelize.QueryTypes.UPDATE });


    return { hasResults: results.length > 0, datas: resultado};
}