text: //modelos
  const Produto_Model = require('../models/Produto_Model')
  
  //services
  const codigo_service = require('../services/codigo_service')
  
  //controllers
  const Especificacoes_Controller = require('./Especificacoes_Controller')
  const Estoque_Controller = require('./Estoque_Controller')
  
  module.exports = {
      async criar(req, res) {
          try {
              var { nome, descricao, valor_total, nome_categoria, nome_tamanho, nome_cor } = req.body
  
              const id_categoria = await Especificacoes_Controller.criar_categoria(nome_categoria)
              const id_tamanho = await Especificacoes_Controller.criar_tamanho(nome_tamanho)
              const id_cor = await Especificacoes_Controller.criar_cor(nome_cor)
  
              const codigo = codigo_service.montar(id_categoria, id_tamanho, id_cor)
  
              const id_estoque = await Estoque_Controller.criar()
     
              await Produto_Model.create({ nome, descricao, valor_total, codigo, id_categoria, id_tamanho, id_cor, id_estoque }).catch(error => {
                  console.log(error)
                  return res.status(400).json(`Erro ao criar o produto`)
              })
  
              return res.status(201).json(`Produto criado!`)
          } catch (error) {
              console.log(error)
              res.status(500).json('Erro no servidor')
          }
      },
  
      async recuperar_id(codigo) {
          const produto = await Produto_Model.findOne({ where: { codigo } })
          return produto.id
      },
  
      async listar_all(req, res) {
          try {
              const produtos = await Produto_Model.findAll({
                  attributes: { exclude: ['id_categoria', 'id_cor', 'id_tamanho', 'id_estoque', 'createdAt', 'updatedAt'] },
                  order: [['nome', 'asc']],
                  include: [
                      {
                          association: 'categoria',
                          attributes: { exclude: ['id', 'createdAt', 'updatedAt'] },
                      },
                      {
                          association: 'cor',
                          attributes: { exclude: ['id', 'createdAt', 'updatedAt'] },
                      },
                      {
                          association: 'tamanho',
                          attributes: { exclude: ['id', 'createdAt', 'updatedAt'] },
                      },
                      {
                          association: 'estoque',
                          attributes: { exclude: ['id', 'createdAt', 'updatedAt'] },
                      }
                  ]
              })
              return res.status(200).json(produtos)
          } catch (error) {
              console.log(error)
              res.status(500).json('Erro no servidor')
          }
      },
  
      async listar_codigo(req, res) {
          try {
              var { codigo } = req.params
  
              const produto = await Produto_Model.findOne({where: {codigo}})
  
              const produtos = await Produto_Model.findByPk(produto.id, {
                  attributes: { exclude: ['id_categoria', 'id_cor', 'id_tamanho', 'createdAt', 'updatedAt'] },
                  include: [
                      {
                          association: 'categoria',
                          attributes: { exclude: ['id', 'createdAt', 'updatedAt'] },
                      },
                      {
                          association: 'tamanho',
                          attributes: { exclude: ['id', 'createdAt', 'updatedAt'] },
                      },
                      {
                          association: 'cor',
                          attributes: { exclude: ['id', 'createdAt', 'updatedAt'] },
                      }
                  ]
              })
              return res.status(200).json(produtos)
          } catch (error) {
              console.log(error)
              res.status(500).json('Erro no servidor')
          }
      },
  
      async editar(req, res) {
          try {
              var { id, nome, descricao, codigo, valor_total, categoria, tamanho, cor, id_estoque } = req.body
  
              const id_categoria = await Especificacoes_Controller.criar_categoria(categoria.nome)
              const id_tamanho = await Especificacoes_Controller.criar_tamanho(tamanho.nome)
              const id_cor = await Especificacoes_Controller.criar_cor(cor.nome)
  
              codigo = codigo_service.remontar(codigo, id_categoria, id_tamanho, id_cor)
  
              await Produto_Model.update({nome, descricao, valor_total, codigo, id_categoria, id_tamanho, id_cor}, {where: {id}}).catch(error => {
                  console.log(error)
                  return res.status(400).json(`Erro ao editar o produto`)
              })
  
              await Estoque_Controller.editar(id_estoque, valor_total)
  
              return res.status(200).json(`Produto editado`)
          } catch (error) {
              console.log(error)
              res.status(500).json('Erro no servidor')
          }
      },
  
      async listar_all_nome_codigo(req, res) {
          try {
              const produtos = await Produto_Model.findAll({
                  attributes: ['nome', 'codigo'],
                  order: [['nome', 'asc']],
              })
              return res.status(200).json(produtos)
          } catch (error) {
              console.log(error)
              res.status(500).json('Erro no servidor')
          }
      },
  }