import subprocess
import os
import json
from playwright.sync_api import sync_playwright

def get_credentials():
    """1Password からクレデンシャルを取得する（ログイン直前で呼び出す）"""
    print("🔑 クレデンシャル取得中…")

    vault_name = os.getenv("VAULT_NAME")
    item_name = os.getenv("ITEM_NAME")

    if not vault_name or not item_name:
        print("⚠️ VAULT_NAME または ITEM_NAME が設定されていません！")
        exit(1)

    print(f"🗄️ Vault: {vault_name}, 🔍 Item: {item_name}")

    result = subprocess.run(
        ["op", "item", "get", item_name, "--vault", vault_name, "--format", "json"],
        capture_output=True, text=True
    )

    if result.returncode == 0:
        print("✅ クレデンシャル取得成功！")
        json_data = json.loads(result.stdout)
        print(json.dumps(json_data, indent=4))
        return json_data
    else:
        print(f"⚠️ クレデンシャル取得失敗！\n{result.stderr}")
        exit(1)

def slack_export():
    """Slack のエクスポート処理を実行"""
    print("🟢 slack_export() が呼ばれた")

    # 仮想ディスプレイ起動
    print("🖥️ 仮想ディスプレイ起動中…")
    xvfb_process = subprocess.Popen(["Xvfb", ":99", "-screen", "0", "1920x1080x24"])
    os.environ["DISPLAY"] = ":99"

    print("🚀 Playwright 起動開始")
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()

        print("🌍 Slack ページに遷移開始")
        try:
            page.goto("https://timetreeapp.slack.com/services/export")
            print("🖥️ ページ読み込み完了")
            print(f"📄 現在のページタイトル: {page.title()}")
        except Exception as e:
            print(f"❌ ページ遷移失敗！エラー: {e}")
            browser.close()
            xvfb_process.kill()
            exit(1)

        # **ログイン直前でクレデンシャルを取得**
        print("🔑 ログイン情報を取得中…")
        credentials = get_credentials()

        username = credentials["fields"][0]["value"]
        password = credentials["fields"][1]["value"]
        otp = None

        # OTP（ワンタイムパスワード）を抽出
        for field in credentials["fields"]:
            if field["type"] == "OTP":
                otp = field["totp"]
                break

        print(f"📝 取得したクレデンシャル: {username} / {password[:3]}*** / OTP: {otp}")

        # スクリーンショットを撮る（エクスポートページに到達したか確認）
        try:
            screenshot_path = "/app/screenshots/slack_export.png"
            page.screenshot(path=screenshot_path)
            print(f"✅ スクリーンショット撮影成功: {screenshot_path}")
        except Exception as e:
            print(f"❌ スクリーンショット撮影失敗！エラー: {e}")

        # ここから実際のエクスポート処理を追加（ボタン押す処理とか）
        try:
            print("📌 エクスポートボタンの検索開始…")
            export_button = page.locator("text=Export").first  # ボタンのロケータを取得
            if export_button.is_visible():
                print("✅ エクスポートボタン発見！クリック開始")
                export_button.click()
                print("✅ エクスポートボタンクリック完了！")
            else:
                print("⚠️ エクスポートボタンが見つかりませんでした！")
        except Exception as e:
            print(f"❌ エクスポートボタン処理失敗！エラー: {e}")

        browser.close()

    xvfb_process.kill()
    print("✅ Slack エクスポート完了！")

if __name__ == "__main__":
    print("🚀 Slack Exporter 起動！")

    slack_export()
    print("✅ Playwright Runner 完了！")
