-- Adiciona campos necessários para contas a receber (mesmas funcionalidades de contas a pagar)
-- Execute este script no banco de dados

-- Adiciona coluna receipt_date (data de recebimento)
ALTER TABLE receivables
    ADD COLUMN receipt_date DATE NULL COMMENT 'Data de recebimento' AFTER status,
    ADD INDEX idx_receipt_date (receipt_date);

-- Adiciona colunas de conta recorrente
ALTER TABLE receivables
    ADD COLUMN is_recurring TINYINT(1) DEFAULT 0 COMMENT 'Indica se é conta recorrente',
    ADD COLUMN recurring_due_day INT DEFAULT NULL COMMENT 'Dia dos demais vencimentos (1-31)',
    ADD COLUMN recurring_repetitions INT DEFAULT NULL COMMENT 'Quantidade de repetições da conta recorrente';

-- Adiciona coluna recurring_group_id para identificar grupos de contas recorrentes
ALTER TABLE receivables
    ADD COLUMN recurring_group_id INT NULL COMMENT 'ID da conta original do grupo recorrente (NULL se não for parte de um grupo)' AFTER recurring_repetitions,
    ADD INDEX idx_recurring_group (recurring_group_id),
    ADD FOREIGN KEY (recurring_group_id) REFERENCES receivables(id) ON DELETE SET NULL;

-- Atualiza receipt_date para contas já recebidas baseado na data da transação
UPDATE receivables r
INNER JOIN transactions t ON t.reference_id = r.id AND t.reference_type = 'receivable' AND t.type = 'inflow'
SET r.receipt_date = DATE(t.created_at)
WHERE r.status = 'paid' AND (r.receipt_date IS NULL OR r.receipt_date = '0000-00-00');

