<?php 
include 'config.php';
include 'routeros_api.class.php';

// ১. টাইমলিমিট এবং টাইমজোন সেটআপ
set_time_limit(0); 
date_default_timezone_set('Asia/Dhaka');

$scheduled_time = '20:09'; 

// ক্রন জব নির্দিষ্ট সময়ে রান হবে, তবে ম্যানুয়াল একশন (activate) থাকলে সরাসরি পাস করবে
if (date('H:i') !== $scheduled_time && !isset($_GET['action'])) {
    exit("Execution skipped: Not the scheduled time."); 
}

$api = new RouterosAPI();

/**
 * SMS পাঠানো এবং লগ রাখার ফাংশন (Collation এরর হ্যান্ডেলড)
 */
function send_and_log_sms($conn, $cid, $phone, $message, $isp_id) {
    // ফোন নাম্বার ক্লিন করা
    $clean_phone = preg_replace('/[^0-9]/', '', $phone);
    if (strlen($clean_phone) == 11 && substr($clean_phone, 0, 2) == '01') {
        $clean_phone = '88' . $clean_phone;
    }
    
    // API কনফিগারেশন
    $secret = "78af639d88d125aeeb241d1991a09fbf";
    $sim = "0";
    
    $api_url = "https://wa.nux.my.id/api/sendSMS?to=" . urlencode($clean_phone) . 
               "&msg=" . urlencode($message) . 
               "&sim=" . urlencode($sim) . 
               "&secret=" . urlencode($secret);

    $context = stream_context_create([
        'http' => [
            'timeout' => 15, 
            'ignore_errors' => true
        ]
    ]);
    
    $response = @file_get_contents($api_url, false, $context);
    $status = ($response !== false) ? 'success' : 'failed';

    // ডাটাবেসে সেভ করার আগে এসকেপ করা
    $safe_msg = mysqli_real_escape_string($conn, $message);
    $safe_response = mysqli_real_escape_string($conn, $response);
    
    // SaaS Isolation এর জন্য isp_id সহ লগ রাখা হচ্ছে
    $log_query = "INSERT INTO sms_logs (isp_id, customer_id, phone, message, status, response_text, sent_at) 
                  VALUES ('$isp_id', '$cid', '$clean_phone', '$safe_msg', '$status', '$safe_response', NOW())";
    mysqli_query($conn, $log_query);
    
    return $status;
}


// --- ২. কোম্পানির MikroTik কনফিগারেশন নিয়ে আসার ফাংশন ---
function get_isp_mikrotik($conn, $isp_id) {
    $safe_id = mysqli_real_escape_string($conn, $isp_id);
    // isp_settings টেবিল থেকে ওই নির্দিষ্ট কোম্পানির রাউটার ডিটেইলস নিয়ে আসা
    $res = mysqli_query($conn, "SELECT * FROM isp_settings WHERE isp_id = '$safe_id' LIMIT 1");
    return mysqli_fetch_assoc($res);
}


// --- ৩. মেয়াদ শেষ হওয়া আইডি ডি-অ্যাক্টিভেট এবং প্রোফাইল Block করা ---
// মাল্টি-টেন্যান্ট সাপোর্টের জন্য সব কোম্পানির এক্সেস ডেটা লুপে প্রসেস হবে
$expired_users = mysqli_query($conn, "SELECT customer_id, name, phone, bill_amount, expiry_date, isp_id FROM customers WHERE status='active' AND expiry_date < NOW() LIMIT 500");

if (mysqli_num_rows($expired_users) > 0) {
    while ($row = mysqli_fetch_assoc($expired_users)) {
        $cid = $row['customer_id'];
        $phone = $row['phone'];
        $name = $row['name'];
        $isp_id = $row['isp_id'];

        // নির্দিষ্ট কোম্পানির রাউটার কানেকশন ডাটা রিকভারি
        $router = get_isp_mikrotik($conn, $isp_id);
        if (!$router) continue; // রাউটার সেটিংস না থাকলে স্কিপ করবে

        if ($api->connect($router['mikrotik_ip'], $router['mikrotik_username'], $router['mikrotik_password'], $router['mikrotik_port'] ?? 8728)) {
            
            // MikroTik-এ প্রোফাইল পরিবর্তন
            $api->comm("/ppp/secret/set", array("numbers" => $cid, "profile" => "Block"));
            
            // সেশন কিকআউট
            $online = $api->comm("/ppp/active/print", array("?name" => $cid));
            if (!empty($online)) {
                $api->comm("/ppp/active/remove", array(".id" => $online[0][".id"]));
            }
            $api->disconnect();

            // ডাটাবেস আপডেট
            mysqli_query($conn, "UPDATE customers SET status='deactivated' WHERE customer_id = '$cid' AND isp_id = '$isp_id'");

            // SMS বডি
            $msg = "Dear $name,\nYour internet bill is due so your connection has been disconnected.\nPlease pay the bill to activate the connection.\n\nCustomer Portal:\nrangdhanu.net\nIf you have any complaints call:\n01724565235\n\nThanks\nRANGDHANU.NET";
            
            send_and_log_sms($conn, $cid, $phone, $msg, $isp_id);
            usleep(200000); // ২০ মিলিসেকেন্ড বিরতি (API সেফটি)
        }
    }
}


// --- ৪. ১ দিন আগে বিল রিমাইন্ডার ---
$today = date('Y-m-d');
$tomorrow = date('Y-m-d', strtotime('+1 day'));

$remind_users = mysqli_query($conn, "SELECT customer_id, name, phone, expiry_date, bill_amount, isp_id FROM customers 
                                     WHERE DATE(expiry_date) = '$tomorrow' 
                                     AND status='active' 
                                     AND (last_reminder_date IS NULL OR last_reminder_date != '$today') LIMIT 500");

if (mysqli_num_rows($remind_users) > 0) {
    while ($user = mysqli_fetch_assoc($remind_users)) {
        $cid = $user['customer_id'];
        $phone = $user['phone'];
        $name = $user['name'];
        $expiry = $user['expiry_date'];
        $isp_id = $user['isp_id'];
        
        $msg = "Dear $name,\nYour internet bill will expire on $expiry. Please pay your bill quickly to avoid disconnection.\n\nUser ID: $cid\nPortal: rangdhanu.net\n\nCall: 01724565235\nRANGDHANU.NET";
        
        $status = send_and_log_sms($conn, $cid, $phone, $msg, $isp_id);
        
        if($status == 'success') {
            mysqli_query($conn, "UPDATE customers SET last_reminder_date = '$today' WHERE customer_id = '$cid' AND isp_id = '$isp_id'");
        }
        usleep(200000); 
    }
}


// --- ৫. আইডি একটিভ করার লজিক (ম্যানুয়াল অ্যাডমিন একশন) ---
if (isset($_GET['action']) && $_GET['action'] == 'activate' && isset($_GET['cid'])) {
    $cid = mysqli_real_escape_string($conn, $_GET['cid']);
    
    // ট্রানজেকশন টেবিলে Collation ত্রুটি এড়াতে এখানে সরাসরি কাস্টমার সার্চ করা হচ্ছে
    $user_data = mysqli_query($conn, "SELECT name, phone, package_profile, isp_id FROM customers WHERE customer_id='$cid' LIMIT 1");
    $u = mysqli_fetch_assoc($user_data);

    if ($u) {
        $phone = $u['phone'];
        $name = $u['name'];
        $isp_id = $u['isp_id'];
        $user_profile = (!empty($u['package_profile'])) ? $u['package_profile'] : "default"; 

        $router = get_isp_mikrotik($conn, $isp_id);
        
        if ($router && $api->connect($router['mikrotik_ip'], $router['mikrotik_username'], $router['mikrotik_password'], $router['mikrotik_port'] ?? 8728)) {
            
            $api->comm("/ppp/secret/set", array(
                "numbers" => $cid, 
                "disabled" => "no",
                "profile" => $user_profile
            ));
            
            $online = $api->comm("/ppp/active/print", array("?name" => $cid));
            if (!empty($online)) {
                $api->comm("/ppp/active/remove", array(".id" => $online[0][".id"]));
            }
            
            $api->disconnect();

            // ডাটাবেস স্ট্যাটাস আপডেট
            mysqli_query($conn, "UPDATE customers SET status='active', last_reminder_date = NULL WHERE customer_id = '$cid' AND isp_id = '$isp_id'");

            $active_msg = "প্রিয় $name, আপনার ইন্টারনেট সফলভাবে সক্রিয় করা হয়েছে। ধন্যবাদ, RANGDHANU.NET";
            send_and_log_sms($conn, $cid, $phone, $active_msg, $isp_id);
            
            echo "Success: $cid activated successfully with profile [$user_profile].";
        } else {
            echo "Error: Unable to connect to MikroTik Router.";
        }
    }
}
?>