<?php
/**
 * Admin forced join channels management
 * مدیریت کانال‌های عضویت اجباری
 */
require_once 'config.php';

// Error handling
try {
    $input = json_decode(file_get_contents('php://input'), true) ?: $_GET;
    $userId = miniapp_require_admin();

    // GET - list channels and global setting
    if ($_SERVER['REQUEST_METHOD'] === 'GET') {
        $stmt = $pdo->query("SELECT * FROM forced_channels ORDER BY id ASC");
        $channels = $stmt->fetchAll();
        
        $forceEnabled = getSetting('force_join_enabled', '0') === '1';
        
        echo json_encode([
            'ok'   => true,
            'data' => [
                'channels'      => $channels,
                'force_enabled' => $forceEnabled,
            ],
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }

    // POST - manage channels
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $action = $input['action'] ?? '';
        
        if ($action === 'toggle_global') {
            $current = getSetting('force_join_enabled', '0');
            $new = $current === '1' ? '0' : '1';
            setSetting('force_join_enabled', $new);
            gemaccAdminActionNotify($new === '1' ? 'اجبار عضویت فعال شد' : 'اجبار عضویت غیرفعال شد', [], $userId);
            
            echo json_encode([
                'ok'      => true,
                'message' => $new === '1' ? 'اجبار عضویت فعال شد' : 'اجبار عضویت غیرفعال شد',
                'enabled' => $new === '1',
            ], JSON_UNESCAPED_UNICODE);
            exit;
        }
        
        if ($action === 'add') {
            $username = trim($input['username'] ?? '');
            $title = trim($input['title'] ?? '');
            $inviteLink = trim($input['invite_link'] ?? '');
            
            if (!$username) {
                echo json_encode(['ok' => false, 'error' => 'username الزامی است'], JSON_UNESCAPED_UNICODE);
                exit;
            }
            
            // Clean username - remove @ if present
            $username = ltrim($username, '@');
            
            // Validate username format (more flexible)
            if (strlen($username) < 5) {
                echo json_encode(['ok' => false, 'error' => 'username باید حداقل 5 کاراکتر باشد'], JSON_UNESCAPED_UNICODE);
                exit;
            }
            
            // Add @ prefix for storage
            $usernameWithAt = '@' . $username;
            
            // Check duplicate
            $stmt = $pdo->prepare("SELECT id FROM forced_channels WHERE channel_username = ? OR channel_username = ?");
            $stmt->execute([$username, $usernameWithAt]);
            if ($stmt->fetch()) {
                echo json_encode(['ok' => false, 'error' => 'این کانال قبلاً اضافه شده'], JSON_UNESCAPED_UNICODE);
                exit;
            }
            
            // Try to get channel info from Telegram
            if (!$title) {
                $chatInfo = tg('getChat', ['chat_id' => '@' . $username]);
                if ($chatInfo && isset($chatInfo['ok']) && $chatInfo['ok']) {
                    $title = $chatInfo['result']['title'] ?? $username;
                } else {
                    $title = $username;
                }
            }
            
            if (!$inviteLink) {
                $inviteLink = "https://t.me/{$username}";
            }
            
            // Use correct column name: channel_title (not title)
            $stmt = $pdo->prepare("
                INSERT INTO forced_channels (channel_username, channel_title, invite_link, is_active)
                VALUES (?, ?, ?, 1)
            ");
            $stmt->execute([$usernameWithAt, $title, $inviteLink]);
            gemaccAdminActionNotify('کانال عضویت اجباری اضافه شد', ['کانال'=>$usernameWithAt, 'عنوان'=>$title, 'لینک'=>$inviteLink], $userId);
            
            echo json_encode([
                'ok'      => true,
                'message' => 'کانال اضافه شد',
                'id'      => $pdo->lastInsertId(),
            ], JSON_UNESCAPED_UNICODE);
            exit;
        }
        
        if ($action === 'toggle') {
            $channelId = (int)($input['channel_id'] ?? 0);
            if (!$channelId) {
                echo json_encode(['ok' => false, 'error' => 'channel_id required'], JSON_UNESCAPED_UNICODE);
                exit;
            }
            
            $stmt = $pdo->prepare("UPDATE forced_channels SET is_active = 1 - is_active WHERE id = ?");
            $stmt->execute([$channelId]);
            gemaccAdminActionNotify('وضعیت کانال عضویت اجباری تغییر کرد', ['شناسه کانال'=>$channelId], $userId);
            
            echo json_encode(['ok' => true, 'message' => 'وضعیت کانال تغییر کرد'], JSON_UNESCAPED_UNICODE);
            exit;
        }
        
        if ($action === 'delete') {
            $channelId = (int)($input['channel_id'] ?? 0);
            if (!$channelId) {
                echo json_encode(['ok' => false, 'error' => 'channel_id required'], JSON_UNESCAPED_UNICODE);
                exit;
            }
            
            $stmt = $pdo->prepare("DELETE FROM forced_channels WHERE id = ?");
            $stmt->execute([$channelId]);
            gemaccAdminActionNotify('کانال عضویت اجباری حذف شد', ['شناسه کانال'=>$channelId], $userId);
            
            echo json_encode(['ok' => true, 'message' => 'کانال حذف شد'], JSON_UNESCAPED_UNICODE);
            exit;
        }
        
        if ($action === 'update') {
            $channelId = (int)($input['channel_id'] ?? 0);
            $title = trim($input['title'] ?? '');
            $inviteLink = trim($input['invite_link'] ?? '');
            
            if (!$channelId) {
                echo json_encode(['ok' => false, 'error' => 'channel_id required'], JSON_UNESCAPED_UNICODE);
                exit;
            }
            
            // Use correct column name: channel_title (not title)
            $stmt = $pdo->prepare("UPDATE forced_channels SET channel_title = ?, invite_link = ? WHERE id = ?");
            $stmt->execute([$title, $inviteLink, $channelId]);
            gemaccAdminActionNotify('کانال عضویت اجباری بروزرسانی شد', ['شناسه کانال'=>$channelId, 'عنوان'=>$title, 'لینک'=>$inviteLink], $userId);
            
            echo json_encode(['ok' => true, 'message' => 'کانال بروزرسانی شد'], JSON_UNESCAPED_UNICODE);
            exit;
        }
        
        echo json_encode(['ok' => false, 'error' => 'Invalid action'], JSON_UNESCAPED_UNICODE);
    }
    
} catch (PDOException $e) {
    error_log("admin_channels.php PDO Error: " . $e->getMessage());
    echo json_encode([
        'ok' => false, 
        'error' => 'خطای دیتابیس: جدول forced_channels ممکن است وجود نداشته باشد',
        'debug' => $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
    error_log("admin_channels.php Error: " . $e->getMessage());
    echo json_encode(['ok' => false, 'error' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
}

