import os
import subprocess
import time
import glob
import threading
from http.server import BaseHTTPRequestHandler, HTTPServer

# --- LIGHTWEIGHT WEB SERVER FOR PINGER ---
class PingHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.end_headers()
        self.wfile.write(b"Streamer is active and running!")

    def log_message(self, format, *args):
        return # Keeps the console logs clean

def run_web_server():
    server = HTTPServer(('0.0.0.0', 8080), PingHandler)
    print("Web ping endpoint online on port 8080.")
    server.serve_forever()

# --- FFMEG STREAM LOGIC ---
def get_stream_url():
    base_url = os.getenv("STREAM_URL")
    stream_key = os.getenv("STREAM_KEY")
    if not base_url or not stream_key:
        print("ERROR: Missing config variables!")
        return None
    return f"{base_url.rstrip('/')}/{stream_key.lstrip('/')}"

def main():
    # Start the web listener in a separate thread so Render stays happy
    web_thread = threading.Thread(target=run_web_server, daemon=True)
    web_thread.start()

    rtmp_url = get_stream_url()
    if not rtmp_url:
        return

    video_path = "background_video.mp4"
    audio_files = glob.glob('*.mp3')
        
    if not audio_files:
        print("ERROR: No audio tracks (.mp3) found!")
        return
    if not os.path.exists(video_path):
        print(f"ERROR: Missing placeholder video at {video_path}")
        return

    print(f"Found {len(audio_files)} tracks. Launching live loop...")

    while True:
        for audio_track in audio_files:
            print(f"Streaming segment: {audio_track}")
            command = [
                'ffmpeg',
                '-re',
                '-stream_loop', '-1', '-i', video_path,
                '-i', audio_track,
                '-c:v', 'copy', # Uses zero CPU by copying your rendered frames directly
                '-c:a', 'aac',
                '-b:a', '128k',
                '-shortest',
                '-f', 'flv',
                rtmp_url
            ]
            process = subprocess.Popen(command)
            process.wait()
            time.sleep(2)

if __name__ == "__main__":
    main()
