'use strict'

const Promotion = require('../models/Promotion')

const promotionsController = {
  async getAll(req, res) {
    try {
      const promotions = await Promotion.findAllActive(req.tenant?.id)
      return res.json(promotions)
    } catch (error) {
      return res.status(500).json({ error: 'Erro interno' })
    }
  },

  async getAllAdmin(req, res) {
    try {
      const promotions = await Promotion.findAll(req.tenant?.id)
      return res.json(promotions)
    } catch (error) {
      return res.status(500).json({ error: 'Erro interno' })
    }
  },

  async create(req, res) {
    try {
      const { nome, descricao, preco_original, preco_promocional, imagem } = req.body
      if (!nome || !preco_promocional) {
        return res.status(400).json({ error: 'Nome e preço promocional são obrigatórios' })
      }
      const result = await Promotion.create({
        nome,
        descricao,
        preco_original:    parseFloat(preco_original) || null,
        preco_promocional: parseFloat(preco_promocional),
        imagem:            imagem || '',
        tenant_id:         req.tenant?.id || 1,
      })
      return res.json({ success: true, id: result.lastInsertRowid })
    } catch (error) {
      console.error('Erro ao criar promoção:', error)
      return res.status(500).json({ error: 'Erro interno' })
    }
  },

  async update(req, res) {
    try {
      const { id } = req.params
      const { nome, descricao, preco_original, preco_promocional, imagem, ativo } = req.body
      await Promotion.update(id, {
        nome,
        descricao,
        preco_original:    parseFloat(preco_original) || null,
        preco_promocional: parseFloat(preco_promocional),
        imagem:            imagem || '',
        ativo:             ativo !== undefined ? ativo : true,
      })
      return res.json({ success: true })
    } catch (error) {
      return res.status(500).json({ error: 'Erro interno' })
    }
  },

  async deletePromotion(req, res) {
    try {
      await Promotion.deleteById(req.params.id)
      return res.json({ success: true })
    } catch (error) {
      return res.status(500).json({ error: 'Erro interno' })
    }
  },

  // Resumo para o Cérebro do WhatsApp (PROMO-07)
  async getActiveSummary(req, res) {
    try {
      const promos = await Promotion.findAllActive(req.tenant?.id)
      const summary = promos.map(p => ({
        id:               p.id,
        nome:             p.nome,
        descricao:        p.descricao,
        preco_original:   p.preco_original,
        preco_promocional: p.preco_promocional,
        desconto_pct:     p.preco_original
          ? Math.round((1 - p.preco_promocional / p.preco_original) * 100)
          : null,
      }))
      return res.json({ total: summary.length, promocoes: summary })
    } catch (error) {
      return res.status(500).json({ error: 'Erro interno' })
    }
  },
}

module.exports = promotionsController
