text: const client = require('../pg');
  const bcrypt = require('bcrypt');
  const jwt = require('jsonwebtoken');
  require('dotenv/config');
  
  
  exports.atualizarperfil = (req, res) =>{
  
      const {id_lojista, nome, doc, nome_fantasia, email, ocupacao} = req.body;
      const LENGTHCPF = 14;
      const LENGTHCNPJ = 18;
  
      if(doc.length === LENGTHCPF){
          client.query("UPDATE p_fisica SET nome_proprietario = $1, nome_fantasia = $2, email = $3, ocupacao = $4 WHERE id_lojista = $5", 
          [nome, nome_fantasia, email, ocupacao, id_lojista],
          (err, result)=>{
              if(err){
                  return res.status(500).send({
                      error : err,
                  })
              }
              return res.status(200).send({
                  message : "Profile updated successfully"
              })
          })
      }
      if(doc.length === LENGTHCNPJ){
          client.query("UPDATE p_juridica SET razao_social = $1, nome_fantasia = $2, email = $3, ocupacao = $4 WHERE id_lojista = $5", 
          [nome, nome_fantasia, email, ocupacao, id_lojista],
          (err, result)=>{
              if(err){
                  return res.status(500).send({
                      error : err,
                  })
              }
              return res.status(200).send({
                  message : "Profile updated successfully"
              })
          })
      }
  }
  
  exports.getMeusClientes = (req,res) =>{
      const id_fila = req.params.id_fila;
      client.query("SELECT CONCAT(u.nome,' ',u.sobrenome) AS nome_completo, u.numero_celular, u.email, u.nascimento FROM cadastra_fila_cliente as cfc LEFT JOIN usuarios as u ON cfc.id_cliente = u.id_cliente WHERE cfc.id_fila = $1 AND cfc.status = 'ATIVO' ORDER BY cfc.id_cadastro ASC;", 
      [id_fila],
      (err, result)=>{
          if(err){
              return res.status(500).send({
                  error : err,
              })
          }
          let response = result.rows;
          response.forEach((item,index)=>{
              let dia = item.nascimento.getDate()
              let mes = item.nascimento.getMonth()+1
              let ano = item.nascimento.getFullYear()
              item.nascimento = `${dia.toString().padStart(2,'0')}/${mes.toString().padStart(2,'0')}/${ano}` 
          })
          return res.status(200).send({
              count: result.rows.length,
              response : result.rows
          })
      })
  }
  
  exports.meusprimeirosclientes = (req, res) => {
      const id_lojista = req.body.id_lojista;
      const quantidade_cliente = 3; //quantidade de cliente que será exibida na tela de home como resumo
      client.query("SELECT id_fila, nome, id_cliente, id_cadastro, status, row FROM (SELECT f.id_fila, u.nome, cfc.id_cliente, cfc.id_cadastro, cfc.status, row_number () over (partition by cfc.id_fila) AS row FROM cadastra_fila_cliente AS cfc INNER JOIN usuarios AS u ON cfc.id_cliente = u.id_cliente INNER JOIN fila as F ON cfc.id_fila::int = f.id_fila WHERE f.id_lojista = $1) cadastra_fila_cliente WHERE row <= $2 AND status = 'ATIVO' ORDER BY id_cadastro asc", [id_lojista, quantidade_cliente], 
      (err, result)=>{
          if(err){
              return res.status(500).send({
                  error : err
              })
          }
          let response = result.rows;
          let group = {};
          response.forEach((item,index)=>{
              if(!group.hasOwnProperty(item.id_fila)){
                  group[item.id_fila] = [item.nome]
              }else{
                  group[item.id_fila].push(item.nome)
              }
          })
          return res.status(200).send({
              response : group
          })
      })
  }
  
  exports.getMyFuncionarios = (req, res) => {
      const id_lojista = req.params.id_lojista;
  
      client.query('SELECT * FROM funcionario WHERE id_lojista = $1', [id_lojista], 
      (err, result)=>{
          if(err){
              return res.status(500).send({
                  error : err
              })
          }
          return res.status(200).send({
              count: result.rows.length,
              response : result.rows
          })
      })
  
  }
  
  exports.getMyFilas = (req, res, next) => {
      const id_lojista = req.body.id_lojista;
  
      client.query('SELECT * FROM fila WHERE id_lojista = $1', [id_lojista], 
      (err, result)=>{
          if(err){
              return res.status(500).send({
                  error : err
              })
          }
          return res.status(200).send({
              count: result.rows.length,
              response : result.rows
          })
      })
  }
  
  
  exports.getData = (req,res, next) =>{
      const email = req.body.email;
  
      client.query('SELECT id_lojista, ocupacao, nome_fantasia, email, cpf as doc, nome_proprietario as nome FROM p_fisica WHERE email = $1 UNION ALL  SELECT id_lojista, ocupacao, nome_fantasia, email, cnpj as doc, razao_social as nome FROM p_juridica WHERE email = $1', [email], 
      (err, result)=>{
          if(err){
              return res.status(500).send({
                  error : err
              })
          }
          return res.status(200).send({
              id_lojista: result.rows[0].id_lojista,
              ocupacao: result.rows[0].ocupacao,
              nome_fantasia: result.rows[0].nome_fantasia,
              email: result.rows[0].email,
              doc: result.rows[0].doc,
              nome: result.rows[0].nome,
          })
          
      })
  }
  
  exports.loginLojista = (req, res, next) => {
      const {email, senha} = req.body;
      client.query('SELECT * FROM lojista WHERE email = $1',[email],(err,result)=>{
          if(err){
              return res.status(500).send({
                  error : err
              })
          }
          if(result.rows.length < 1){
              return res.status(401).send({
                  message: "Erro na autenticação"
              })
          }
          bcrypt.compare(senha, result.rows[0].senha, (err, results) => {
              if(err){
                  return res.status(401).send({
                      message: "Erro na autenticação"
                  })
              }
              if(results){
                  const token = jwt.sign({
                      id_lojista : result.rows[0].id_lojista,
                      email : result.rows[0].email
                  },process.env.JWT_KEY, 
                  {
                      expiresIn: "1h"
                  });
                  return res.status(200).send({
                      message: "Autenticado com sucesso",
                      token: token
                  })
              }
              return res.status(401).send({
                  message: "Erro na autenticação"
              })
          })
          });   
  }
  
  exports.cadastroLojista = (req, res, next)=>{
      //tipo de doc: cpf ou cnpj
      //doc: numero do documento
      //nome: nome_proprietario ou razao social 
      const {ocupacao, nome_fantasia, email, senha, tipo_doc, doc,nome } = req.body;
      client.query('SELECT * FROM lojista WHERE email = $1', [email],(err, result)=>{
          if(err){
              return res.status(500).send({
                  error: err
              })
          }
          if(result.rows.length > 0){
              return res.status(409).send({
                  message : "email já existe",
              })
          }else{
              bcrypt.hash(senha, 10, (errBcrypt, hash)=>{
                  if(errBcrypt){
                      return res.status(500).send({error: errBcrypt});
                  }
                  if(tipo_doc == "CPF"){
                      pessoa = "F";
                      client.query('INSERT INTO p_fisica (ocupacao, nome_fantasia, email, senha, pessoa, cpf, nome_proprietario) VALUES ($1, $2, $3, $4,$5, $6, $7)', [ocupacao, nome_fantasia, email, hash, pessoa, doc, nome], (err, result)=>{
                          if(err){
                              return res.status(500).send({
                                  error: err
                              })
                          }
                          return res.status(201).send({
                              message: "Lojista cadastrado com sucesso!"
                          })
                      })
                  }else if(tipo_doc == "CNPJ"){
                      pessoa = "J"
                      client.query('INSERT INTO p_juridica (ocupacao, nome_fantasia, email, senha, pessoa, cnpj, razao_social) VALUES ($1, $2, $3, $4,$5, $6, $7)', [ocupacao, nome_fantasia, email, hash, pessoa, doc, nome], (err, result)=>{
                          if(err){
                              return res.status(500).send({
                                  error: err
                              })
                          }
                          return res.status(201).send({
                              message: "Lojista cadastrado com sucesso!"
                          })
                      })
                  }
  
              })
          }
      })
  }
  
  
  