import sys
import os
vendor_path = os.path.join(os.path.dirname(__file__), 'vendor')
if vendor_path not in sys.path:
    sys.path.insert(0, vendor_path)

import tweepy
import logging
from x_sheets_writer import XSheetsManager
from x_api_client import XApiClient

# ログ設定
logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger(__name__)

CREDS_FILE = os.path.join(os.path.dirname(__file__), "credentials.json")
SPREADSHEET_ID = "1icqi5ZjqjRUOcGnxtDyHw1-gXj-osmGjB8twUnKB6i0"

def check_permission():
    print("🔍 X API 診断を開始します...\n")
    
    try:
        sheet_mgr = XSheetsManager(CREDS_FILE, SPREADSHEET_ID)
        settings = sheet_mgr.get_settings()
        client = XApiClient(settings)
        
        # 1. 投稿テスト (API v2 /tweets)
        # ※Freeプランでも可能なはず
        print("--- [1] 投稿テスト (Post Tweet) ---")
        try:
            # 重複投稿を避けるためタイムスタンプを入れる
            import datetime
            now = datetime.datetime.now().strftime("%H:%M:%S")
            res = client.client.create_tweet(text=f"API Test {now} (This is a system diagnostic check)")
            print("✅ 成功: 投稿（ツイート/リプライ）機能は有効です。\n")
        except tweepy.errors.Forbidden as e:
            print(f"❌ 失敗: {e}")
            print("💡 アドバイス: Appの権限が 'Read' のみになっているか、OAuth 1.0a が未設定の可能性があります。\n")
        except Exception as e:
            print(f"⚠️ 予期せぬエラー: {e}\n")

        # 2. 検索テスト (API v2 /tweets/search/recent)
        # ※Basicプラン以上が必要
        print("--- [2] 検索テスト (Search Tweets) ---")
        try:
            res = client.client.search_recent_tweets(query="Python", max_results=10)
            print("✅ 成功: 検索機能は有効です（Basicプラン以上の可能性があります）。\n")
        except tweepy.errors.Forbidden as e:
            print(f"❌ 失敗: {e}")
            print("💡 アドバイス: Freeプランでは検索機能は利用できません。Basicプランへの加入が必要です。\n")
        
        # 3. いいねテスト (API v2 /users/:id/likes)
        # ※Basicプラン以上が必要
        print("--- [3] いいねテスト (Like Tweet) ---")
        try:
            # 自分のIDを取得
            me = client.client.get_me()
            # 適当なツイート（自分の投稿など）をいいねしてみるテストはここでは控え、権限のみ確認
            # 実際には 403 が出れば制限あり
            print("ℹ️ 検索やフォローが失敗する場合、いいねも制限されている可能性が高いです。\n")
        except Exception as e:
            print(f"⚠️ 確認エラー: {e}\n")

        print("====================================================")
        print("💡 【総合的な診断結果のヒント】")
        print("1. 全て失敗する場合: API Key/Secret, Access Token/Secret が間違っています。")
        print("2. 投稿のみ成功し、検索が失敗する場合: プランが 'Free' です。Basicプランに加入するか、検索なしの運用を検討してください。")
        print("3. 全て失敗し 'Frozen' と出る場合: Xアカウントが凍結されているか、Appの権限設定が不正です。")
        print("====================================================")

    except Exception as e:
        print(f"❌ 診断スクリプト自体の実行に失敗しました: {e}")

if __name__ == "__main__":
    check_permission()
