'use strict'

const PedidoRecorrente = require('../models/PedidoRecorrente')
const Cotacao          = require('../models/Cotacao')
const Produto          = require('../models/Produto')

const TENANT_ID = parseInt(process.env.TENANT_ID || '1', 10)

module.exports = {
  /** GET /api/recorrentes — lista do usuário logado */
  async list(req, res) {
    try {
      const rows = await PedidoRecorrente.listByUser(req.user.id, TENANT_ID)
      res.json(rows)
    } catch (e) {
      console.error('[recorrente.list]', e.message)
      res.status(500).json({ error: 'Erro ao listar pedidos recorrentes' })
    }
  },

  /** POST /api/recorrentes */
  async create(req, res) {
    try {
      const { nome, itens, frequencia, proximo_em, cliente_id } = req.body
      if (!itens?.length)     return res.status(400).json({ error: 'Informe ao menos um item' })
      if (!proximo_em)        return res.status(400).json({ error: 'Informe a data do primeiro pedido' })

      const rec = await PedidoRecorrente.create({
        tenant_id: TENANT_ID,
        user_id:   req.user.id,
        cliente_id: cliente_id || null,
        nome:       nome || 'Pedido Recorrente',
        itens,
        frequencia: frequencia || 'mensal',
        proximo_em,
      })
      res.status(201).json(rec)
    } catch (e) {
      console.error('[recorrente.create]', e.message)
      res.status(500).json({ error: 'Erro ao criar pedido recorrente' })
    }
  },

  /** PUT /api/recorrentes/:id */
  async update(req, res) {
    try {
      const { nome, itens, frequencia, proximo_em, pausado } = req.body
      await PedidoRecorrente.update(req.params.id, req.user.id, { nome, itens, frequencia, proximo_em, pausado })
      res.json({ ok: true })
    } catch (e) {
      console.error('[recorrente.update]', e.message)
      res.status(500).json({ error: 'Erro ao atualizar pedido recorrente' })
    }
  },

  /** PATCH /api/recorrentes/:id/pausa */
  async togglePausa(req, res) {
    try {
      const rec = await PedidoRecorrente.findById(req.params.id, req.user.id)
      if (!rec) return res.status(404).json({ error: 'Não encontrado' })
      await PedidoRecorrente.togglePausa(req.params.id, req.user.id, !rec.pausado)
      res.json({ pausado: !rec.pausado })
    } catch (e) {
      console.error('[recorrente.togglePausa]', e.message)
      res.status(500).json({ error: 'Erro ao pausar/retomar' })
    }
  },

  /** DELETE /api/recorrentes/:id */
  async remove(req, res) {
    try {
      await PedidoRecorrente.remove(req.params.id, req.user.id)
      res.json({ ok: true })
    } catch (e) {
      console.error('[recorrente.remove]', e.message)
      res.status(500).json({ error: 'Erro ao remover pedido recorrente' })
    }
  },
}
