<?php
/**
 * API: إرسال صورة
 * POST /api/send_image.php (multipart/form-data)
 * 
 * يستقبل صورة من واجهة الويب:
 * 1. يحفظها محلياً على السيرفر
 * 2. يرسلها عبر wifi2fm.com /api/send كـ media message
 * 3. يبلّغ البوت عبر webhook
 */

session_start();
header('Content-Type: application/json');

require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/functions.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    jsonResponse(['error' => 'Method not allowed'], 405);
}

if (!isset($_SESSION['whatsapp_number']) || !isset($_SESSION['whatsapp_verified'])) {
    jsonResponse(['error' => 'لا توجد جلسة نشطة.'], 401);
}

$phone   = $_SESSION['whatsapp_number'];
$caption = sanitizeMessage($_POST['message'] ?? '');

// التحقق من الصورة
if (!isset($_FILES['image']) || $_FILES['image']['error'] !== UPLOAD_ERR_OK) {
    jsonResponse(['error' => 'لم يتم رفع صورة صالحة'], 400);
}

$file     = $_FILES['image'];
$maxSize  = 10 * 1024 * 1024; // 10MB
$allowed  = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];

if ($file['size'] > $maxSize) {
    jsonResponse(['error' => 'حجم الصورة يتجاوز 10 ميجابايت'], 400);
}

$finfo    = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $file['tmp_name']);
finfo_close($finfo);

if (!in_array($mimeType, $allowed)) {
    jsonResponse(['error' => 'نوع الملف غير مسموح. استخدم JPG, PNG, GIF, أو WebP'], 400);
}

// حفظ الصورة محلياً
$uploadsDir = STORAGE_PATH . 'uploads/';
if (!is_dir($uploadsDir)) mkdir($uploadsDir, 0755, true);

$ext      = pathinfo($file['name'], PATHINFO_EXTENSION) ?: 'jpg';
$filename = 'img_' . time() . '_' . bin2hex(random_bytes(4)) . '.' . $ext;
$filepath = $uploadsDir . $filename;

if (!move_uploaded_file($file['tmp_name'], $filepath)) {
    jsonResponse(['error' => 'فشل حفظ الصورة'], 500);
}

// URL للصورة (للوصول من الويب)
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
$host     = $_SERVER['HTTP_HOST'];
$basePath = rtrim(dirname(dirname($_SERVER['SCRIPT_NAME'])), '/');
$imageUrl = "{$protocol}://{$host}{$basePath}/data/uploads/{$filename}";

// تخزين الرسالة محلياً
$outgoing = createMessage('outgoing', $caption ?: '[صورة]', $phone, 'image');
$outgoing['source']    = 'web';
$outgoing['image_url'] = $imageUrl;
saveMessage($phone, $outgoing);

if (isRateLimited($phone)) {
    jsonResponse(['error' => 'رسائل كثيرة جداً. انتظر لحظة.'], 429);
}
recordRateLimit($phone);

// ── إرسال الصورة عبر wifi2fm.com API ──
$apiResult = waApiCall(WA_ENDPOINT_SEND, [
    'number'    => $phone,
    'type'      => 'media',
    'message'   => $caption,
    'media_url' => $imageUrl,
    'filename'  => $filename,
]);

$apiSuccess = ($apiResult && ($apiResult['status'] ?? '') === 'success');

// ── إبلاغ البوت عبر webhook ──
$botWebhookUrl = defined('WA_ORIGINAL_WEBHOOK_URL') ? WA_ORIGINAL_WEBHOOK_URL : '';
$botNotified = false;

if (!empty($botWebhookUrl)) {
    $msgId = strtoupper(bin2hex(random_bytes(12)));
    
    // صيغة received_message مع صورة
    $payload = json_encode([
        'instance_id' => WA_INSTANCE_ID,
        'data' => [
            'event' => 'received_message',
            'message' => [
                'body_message' => [
                    'content' => $caption ?: '[صورة]',
                    'type' => 'imageMessage',
                    'messages' => [
                        'imageMessage' => [
                            'url' => $imageUrl,
                            'caption' => $caption,
                            'mimetype' => $mimeType,
                        ],
                    ],
                ],
                'message_key' => [
                    'remoteJid' => $phone . '@s.whatsapp.net',
                    'fromMe' => false,
                    'id' => $msgId,
                ],
                'push_name' => 'Web User',
                'from_contact' => $phone,
            ],
        ],
    ]);
    
    $ch = curl_init($botWebhookUrl);
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $payload,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 10,
        CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
        CURLOPT_SSL_VERIFYPEER => true,
    ]);
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    $botNotified = ($httpCode >= 200 && $httpCode < 300);
}

logEvent('image_sent', [
    'phone'        => $phone,
    'filename'     => $filename,
    'size'         => $file['size'],
    'api_success'  => $apiSuccess,
    'bot_notified' => $botNotified,
]);

jsonResponse([
    'success' => true,
    'message' => [
        'id'        => $outgoing['id'],
        'body'      => htmlspecialchars($caption ?: '[صورة]', ENT_QUOTES, 'UTF-8'),
        'timestamp' => $outgoing['timestamp'],
        'direction' => 'outgoing',
        'status'    => $apiSuccess ? 'delivered' : 'sent',
        'image_url' => $imageUrl,
    ],
    'bot_notified' => $botNotified,
]);
