import os
import sys
import time
import re
from pathlib import Path
from playwright.sync_api import sync_playwright

USER_DATA_DIR = "C:/Projects/Historical/FacebookAutoPoster/chrome_profile"

def upload_short_to_facebook(video_path: str, caption: str, page_url: str = "https://www.facebook.com/"):
    video_file = Path(video_path).resolve()
    if not video_file.exists():
        print(f"❌ File video không tồn tại: {video_file}")
        return False

    print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] Khởi động trình duyệt đăng Shorts: {video_file.name}...")
    with sync_playwright() as p:
        browser = p.chromium.launch_persistent_context(
            user_data_dir=USER_DATA_DIR,
            headless=False,
            args=["--disable-notifications", "--mute-audio"]
        )
        page = browser.pages[0]

        try:
            page.goto(page_url, wait_until="domcontentloaded", timeout=60000)
            page.wait_for_timeout(5000)

            # 1. Kiểm tra đăng nhập
            if "login" in page.url or page.locator('input[name="email"]').is_visible():
                print("⚠️ CẢNH BÁO: Phiên đăng nhập chưa sẵn sàng!")
                print("👉 Hãy đăng nhập thủ công trên cửa sổ Chrome vừa mở.")
                page.wait_for_timeout(60000)
                if "login" in page.url:
                    print("❌ Chưa đăng nhập được. Hủy tác vụ.")
                    return False

            print("Đang mở form đăng bài & đính kèm video...")
            page.keyboard.press("Escape")
            page.wait_for_timeout(1000)

            # Mở composer qua phím P hoặc click
            page.keyboard.press("p")
            page.wait_for_timeout(3000)

            # Nạp video vào input file
            file_inputs = page.locator("input[type='file']")
            if file_inputs.count() > 0:
                print(f"Đang tải lên file video: {video_file.name}...")
                file_inputs.first.set_input_files(str(video_file))
                page.wait_for_timeout(7000)
            else:
                # Fallback: Click nút Ảnh/Video nếu input chưa render
                photo_btn = page.locator("[aria-label*='Ảnh/video'], [aria-label*='Photo/video']").first
                if photo_btn.is_visible():
                    with page.expect_file_chooser() as fc_info:
                        photo_btn.click()
                    file_chooser = fc_info.value
                    file_chooser.set_files(str(video_file))
                    page.wait_for_timeout(7000)

            # Điền caption
            print("Đang chèn Caption & Hashtags...")
            textbox = page.locator("div[role='textbox'][contenteditable='true']").last
            if textbox.is_visible():
                textbox.click()
                page.wait_for_timeout(500)
                page.keyboard.insert_text(caption)
                page.wait_for_timeout(2000)

            # Chờ video upload xong và nút Đăng sẵn sàng
            print("Đang chờ Facebook xử lý video và bấm Đăng...")
            page.wait_for_timeout(5000)

            post_btn = page.locator("[aria-label='Đăng'], [aria-label='Post']").first
            if post_btn.is_visible():
                post_btn.click(timeout=10000)
            else:
                page.keyboard.down("Control")
                page.keyboard.press("Enter")
                page.keyboard.up("Control")

            print(f"✅ Đã gửi lệnh xuất bản Short thành công: {video_file.name}")
            page.wait_for_timeout(10000)
            return True

        except Exception as e:
            print(f"❌ Lỗi đăng video: {e}")
            return False
        finally:
            browser.close()

if __name__ == "__main__":
    if len(sys.argv) >= 3:
        v_path = sys.argv[1]
        c_path = sys.argv[2]
        with open(c_path, "r", encoding="utf-8") as f:
            caption_text = f.read()
        upload_short_to_facebook(v_path, caption_text)
    else:
        print("Usage: python upload_short.py <video_path> <caption_file>")
