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 time

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_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 is_true(val):
    if isinstance(val, bool):
        return val
    return str(val).upper() == "TRUE"

def main():
    logger.info("===" * 15)
    logger.info("🚀 Xリプライ送信ツール (承認済みAI文案の送信) を開始します")
    logger.info("===" * 15)

    try:
        sheet_mgr = XSheetsManager(CREDS_FILE, SPREADSHEET_ID)
        settings = sheet_mgr.get_settings()
        # Reply sending is dormant under the current no-reply operation policy.
        # To restore it later, set enable_reply_sender=TRUE and pause_reply=FALSE.
        enable_reply_sender = is_true(settings.get("enable_reply_sender", False))
        if not enable_reply_sender:
            logger.info("Reply sender is disabled by operation policy (enable_reply_sender=TRUE to restore).")
            return

        
        # pause_reply を優先参照し、未設定時は旧 pause_tweet にフォールバック
        pause_reply = is_true(settings.get("pause_reply", settings.get("pause_tweet", False)))
        
        logger.info("\n--- [承認済みリプライの送信] ---")
        if pause_reply:
            logger.info("「pause_reply」=TRUEのためリプライ処理をスキップ。")
            return

        api_client = XApiClient(settings)
        reply_targets = sheet_mgr.get_reply_targets()
        if not reply_targets:
             logger.info("送信対象（対象FLG②にチェックがついているもの）はありませんでした。")
             return

        success_count = 0

        for target in reply_targets:
            logger.info(f"ツイートID: {target['tweet_url'].split('/')[-1]} にリプライを実行します...")
            if is_true(settings.get("test_reply", False)):
                logger.info(f"[テストモード] 該当ツイート ({target['tweet_url']}) へのリプライ送信をスキップします。")
                result_msg = "成功(テストスキップ)"
            else:
                result_msg = api_client.reply_tweet(target["tweet_url"].split("/")[-1], target["reply_text"])
            
            if result_msg:
                sheet_mgr.update_tweet_reply_result(target["row_index"], result_msg)
                
                # 返信制限エラーが返ってきた場合、このアカウントの今後のフォロー等も止めるためFLGを落とす
                if "制限" in result_msg or "Restricted" in result_msg:
                    logger.warning(f"返信制限エラーを検知。アカウント {target['username']} のフォローアクションを停止します。")
                    sheet_mgr.update_account_follow_flag(target["username"], False)

                if "成功" in result_msg:
                    success_count += 1
            
            time.sleep(2)

        logger.info("\n=== バッチ処理が完了しました ===")
        logger.info(f"リプライ送信成功数: {success_count} / {len(reply_targets)}")

    except Exception as e:
        logger.error(f"想定外の致命的なエラーが発生しました: {e}", exc_info=True)


if __name__ == "__main__":
    main()
