<?php
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/db.php';

function send_expiry_notifications() {
    $pdo = get_db_connection();
    
    // Fetch alert settings from system settings
    $stmtSettings = $pdo->prepare("SELECT setting_key, setting_value FROM system_settings WHERE setting_key IN ('alert_email', 'alert_days')");
    $stmtSettings->execute();
    $settings = $stmtSettings->fetchAll(PDO::FETCH_KEY_PAIR);
    
    $admin_email = $settings['alert_email'] ?? null;
    $alert_days = (int)($settings['alert_days'] ?? 15);
    
    if (!$admin_email) {
        return "E-mail do administrador não configurado no banco de dados.";
    }

    // Buscar contratos que vencem nos próximos X dias (baseado na configuração) e ainda não foram notificados hoje
    // Ou que já passaram da data de alerta configurada individualmente no contrato
    $stmt = $pdo->prepare("
        SELECT c.*, u.name as unit_name, s.name as supplier_name 
        FROM contracts c 
        JOIN units u ON c.unit_id = u.id 
        LEFT JOIN suppliers s ON c.supplier_id = s.id
        WHERE c.status IN ('active', 'renewing')
        AND (
            -- Alerta baseado na configuração global de dias
            c.end_date <= DATE_ADD(CURDATE(), INTERVAL ? DAY)
            OR 
            -- Alerta baseado na data específica definida no contrato (se houver)
            (c.alert_date IS NOT NULL AND c.alert_date <= CURDATE())
        )
        AND (c.last_notification_sent IS NULL OR c.last_notification_sent < CURDATE())
    ");
    $stmt->execute([$alert_days]);
    $expiring = $stmt->fetchAll();
    
    if (empty($expiring)) {
        return "Nenhum contrato para notificar hoje.";
    }

    $count = 0;
    foreach ($expiring as $contract) {
        $supplier_name = $contract['supplier_name'] ?? $contract['supplier'] ?? 'Não informado';
        $subject = "Alerta de Vencimento: " . $contract['title'];
        $message = "O contrato abaixo está próximo do vencimento:\n\n";
        $message .= "Título: " . $contract['title'] . "\n";
        $message .= "Unidade: " . $contract['unit_name'] . "\n";
        $message .= "Fornecedor: " . $supplier_name . "\n";
        $message .= "Vencimento: " . date('d/m/Y', strtotime($contract['end_date'])) . "\n";
        $message .= "Valor: R$ " . number_format($contract['value'], 2, ',', '.') . "\n";
        $message .= "\nAcesse o sistema para mais detalhes: " . APP_URL . "/edit_contract.php?id=" . $contract['id'];
        
        $headers = "From: no-reply@" . $_SERVER['HTTP_HOST'] . "\r\n";
        
        // Em ambiente local, mail() pode não funcionar sem configuração de SMTP
        if (@mail($admin_email, $subject, $message, $headers)) {
            $update = $pdo->prepare("UPDATE contracts SET last_notification_sent = CURDATE() WHERE id = ?");
            $update->execute([$contract['id']]);
            $count++;
        }
    }
    
    return "Notificações enviadas: $count";
}
