import telebot
import requests
import time

BOT_TOKEN = "8328638343:AAHO9xMFr6o-0I8lAYbCaMetuieg4BNtiXw"
bot = telebot.TeleBot(BOT_TOKEN, parse_mode="HTML")

ALLOWED_GROUPS = "-1003110490001"

API_LINK = "https://free-like-api-aditya-ffm.vercel.app"

REGIONS = [
    "IND", "BR", "US", "NA", "SAC", "SG", "RU", "ID", 
    "TW", "VN", "TH", "ME", "PK", "CIS", "BD", "EUROPE", "EU"
]

last_request_time = 0

def make_request(url):
    global last_request_time
    current_time = time.time()
    elapsed = current_time - last_request_time
    
    if elapsed < 1:
        time.sleep(1 - elapsed)
    
    last_request_time = time.time()
    try:
        response = requests.get(url, timeout=10)
        return response
    except Exception as e:
        print(f"Request error: {e}")
        return None

def get_api_remaining():
    try:
        url = f"{API_LINK}/remain"
        response = make_request(url)
        
        if response and response.status_code == 200:
            result = response.json()
            remaining = result.get("remaining", 0)
            daily_limit = result.get("daily_limit", 0)
            return remaining, daily_limit
        return 0, 0
    except Exception as e:
        print(f"Error getting API remaining: {e}")
        return 0, 0

@bot.message_handler(commands=["like"])
def handle_like(message):
    if message.chat.id not in ALLOWED_GROUPS:
        return

    args = message.text.split()
    if len(args) != 3:
        bot.reply_to(message, "<b>Usage: /like {region} {uid}</b>")
        return

    region, uid = args[1].upper(), args[2]
    if region not in REGIONS:
        bot.reply_to(message, f"<b>Invalid region: {region}</b>")
        return

    # Check API remaining likes in real-time before processing
    remaining, daily_limit = get_api_remaining()
    if remaining <= 0:
        bot.reply_to(message, f"<b>Limit Reached! please try again later\nId: {message.chat.id}</b>")
        return

    processing_msg = bot.reply_to(message, "<b>Processing your request...</b>")
    try:
        url = f"{API_LINK}/like?uid={uid}&server_name={region}&key=@adityaapis"
        response = make_request(url)
        
        # Check API remaining again after the request to ensure limit wasn't reached
        remaining_after, daily_limit_after = get_api_remaining()
        
        if response and response.status_code == 200:
            result = response.json()
            status, likes_given = result.get("status"), result.get("LikesGivenByAPI", 0)

            if status == 1:
                nickname = str(result.get('PlayerNickname', 'N/A')).replace('\n', '\\n')
                nickname = nickname.replace('<', '&lt;').replace('>', '&gt;')
                
                text = (
                    "<b>Likes Sent Successfully</b>\n"
                    f"<b>Player Nickname:</b> {nickname}\n"
                    f"<b>Player Region:</b> {result.get('PlayerRegion', 'N/A')}\n"
                    f"<b>Player Level:</b> {result.get('PlayerLevel', 'N/A')}\n"
                    f"<b>Before Likes:</b> {result.get('LikesbeforeCommand', 'N/A')}\n"
                    f"<b>After Likes:</b> {result.get('LikesafterCommand', 'N/A')}\n"
                    f"<b>Likes Given By Bot:</b> {likes_given}"
                )
            elif status == 2:
                text = (
                    "<b>Failed to Send Likes</b>\n"
                    "<b>Success:</b> false\n"
                    "<b>Message:</b> likes_already_send"
                )
            else:
                text = (
                    "<b>Failed to Send Likes</b>\n"
                    "<b>Success:</b> false\n"
                    "<b>Message:</b> player_not_found"
                )
        else:
            text = "<b>Failed to connect to the API. Please try again later.</b>"
        
        bot.edit_message_text(text, message.chat.id, processing_msg.message_id)
    except Exception as e:
        # Check API remaining even if there's an error
        remaining_error, daily_limit_error = get_api_remaining()
        error_text = f"<b>Error:</b> {str(e).replace('<', '&lt;').replace('>', '&gt;')}"
        bot.edit_message_text(error_text, message.chat.id, processing_msg.message_id)

@bot.message_handler(commands=["remain"])
def handle_remain(message):
    if message.chat.id not in ALLOWED_GROUPS:
        return
    
    # Get real-time data from API
    remaining, daily_limit = get_api_remaining()
    msg = f"<b>Global remaining requests:</b> {remaining}/{daily_limit}"
    bot.reply_to(message, msg)

print("Bot running...")
bot.infinity_polling()