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 logging
import os
from datetime import datetime
from x_sheets_writer import XSheetsManager
from x_api_client import XApiClient

# ログ設定
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler("x_post_automation.log", encoding='utf-8'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

# 共通変数の定義
CREDS_FILE = os.path.join(os.path.dirname(__file__), "credentials.json")
SPREADSHEET_ID = "1icqi5ZjqjRUOcGnxtDyHw1-gXj-osmGjB8twUnKB6i0"

def main():
    logger.info("=============================================")
    logger.info("🚀 X自ポスト自動投稿マネージャー を開始します")
    logger.info("=============================================")

    try:
        # 1. スプレッドシートの初期化
        sheet_mgr = XSheetsManager(CREDS_FILE, SPREADSHEET_ID)
        settings = sheet_mgr.get_settings()

        # 2. 設定の取得 (デフォルト値付き)
        post_pause = settings.get("post_pause", False)
        if post_pause:
            logger.info("⚠️ 一時中断FLG(post_pause)がTRUEのため、処理を中止します。")
            return

        test_post = settings.get("test_post", True) 
        post_random_repeat = settings.get("post_random_repeat", False)
        # 「投稿数」が数値でない場合を考慮
        try:
            post_count = int(settings.get("post_count", 1))
        except (ValueError, TypeError):
            post_count = 1

        logger.info(f"設定確認: 投稿数={post_count}, ランダム={post_random_repeat}, テスト={test_post}")

        # 3. 投稿対象の取得
        targets = sheet_mgr.get_post_targets(post_count=post_count, random_mode=post_random_repeat)
        if not targets:
            logger.info("📭 投稿対象となる文章がありません（または使い切り終了）。")
            return

        # 4. APIクライアントの初期化 (settings をそのまま渡す)
        api_client = XApiClient(settings)

        # 5. 投稿実行
        for target in targets:
            text = target["text"]
            row_idx = target["row_index"]

            if test_post:
                logger.info(f"【テスト投稿モード】以下の内容をポスト予定 (行:{row_idx}):\n{text}")
                result_msg = f"テスト投稿完了 ({datetime.now().strftime('%Y/%m/%d %H:%M')})"
            else:
                logger.info(f"ポストを実行します (行:{row_idx})...")
                result = api_client.post_tweet(text)
                
                if result.startswith("エラー"):
                    logger.error(f"投稿失敗: {result}")
                    result_msg = f"{result} ({datetime.now().strftime('%m/%d %H:%M')})"
                else:
                    logger.info("✅ 投稿成功！")
                    result_msg = f"投稿成功 ({datetime.now().strftime('%Y/%m/%d %H:%M')})"

            # 6. スプレッドシートの更新
            sheet_mgr.update_post_result(row_idx, result_msg)

    except Exception as e:
        logger.error(f"予期せぬエラーが発生しました: {e}", exc_info=True)

    logger.info("=============================================")
    logger.info("🏁 処理が終了しました")
    logger.info("=============================================")

if __name__ == "__main__":
    main()
