import telebot
import requests
from PIL import Image
import io
import schedule
import time
import threading
from datetime import datetime

# --- KONFIGURASI ---
TOKEN = "8717492118:AAHQdqOiSeHXpiUCJ9vEgnLqRD3zzGgeUAo"
CHAT_ID = "275595749" 
CCTV_URL = "https://cam.pasuruankota.go.id/sm-kebonagung-3"

bot = telebot.TeleBot(TOKEN)

def ambil_dan_kirim(target_id, caption_text="Update"):
    max_retries = 2 # Dikurangi ke 2 agar tidak bentrok dengan jadwal 30 detik berikutnya
    for i in range(max_retries):
        print(f"[{datetime.now().strftime('%H:%M:%S')}] Mencoba ambil gambar (Percobaan {i+1})...")
        try:
            with requests.Session() as s:
                headers = {'User-Agent': 'Mozilla/5.0', 'Connection': 'close'}
                # Timeout diperketat ke 10 detik agar cepat beralih jika lemot
                response = s.get(CCTV_URL, stream=True, timeout=10, headers=headers)
                
                byte_data = b''
                for chunk in response.iter_content(chunk_size=4096):
                    byte_data += chunk
                    a = byte_data.find(b'\xff\xd8')
                    b = byte_data.find(b'\xff\xd9')
                    if a != -1 and b != -1:
                        jpg_data = byte_data[a:b+2]
                        break
                
                response.close()

            img = Image.open(io.BytesIO(jpg_data))
            output = io.BytesIO()
            img.save(output, format='JPEG', quality=85)
            output.seek(0)

            bot.send_photo(target_id, output, caption=f"{caption_text} ({datetime.now().strftime('%H:%M:%S')})")
            print(f"[{datetime.now().strftime('%H:%M:%S')}] BERHASIL terkirim.")
            return True 

        except Exception as e:
            print(f"[{datetime.now().strftime('%H:%M:%S')}] Percobaan {i+1} GAGAL: {e}")
            if i < max_retries - 1:
                time.sleep(3) # Jeda retry dipercepat ke 3 detik
            else:
                return False

def job_rutin():
    sekarang = datetime.now()
    # Range jam 10:00 sampai 15:59
    if 10 <= sekarang.hour <= 15:
        # print(f"--- Jadwal Otomatis 30 Detik ({sekarang.strftime('%H:%M:%S')}) ---")
        ambil_dan_kirim(CHAT_ID, "Laporan Siang")

def run_job_threaded():
    job_thread = threading.Thread(target=job_rutin)
    job_thread.start()

# --- BAGIAN INTERVAL 30 DETIK ---
schedule.clear()
schedule.every(30).seconds.do(run_job_threaded)
# --------------------------------

@bot.message_handler(commands=['cek'])
def manual_cek(message):
    ambil_dan_kirim(message.chat.id, "Cek Manual")

def run_scheduler():
    while True:
        schedule.run_pending()
        time.sleep(1)

threading.Thread(target=run_scheduler, daemon=True).start()

print("Bot standby. Interval: 30 detik. Range: Jam 10-16.")
bot.infinity_polling()