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 str_to_int(val, default=5):
    try:
        return int(val)
    except:
        return default

def is_true(val):
    if isinstance(val, bool):
        return val
    return str(val).upper() == "TRUE"

def main():
    logger.info("===" * 15)
    logger.info("🚀 Xフォロー後追いツール (未処理アカウントの後追いフォロー) を開始します")
    logger.info("===" * 15)

    try:
        sheet_mgr = XSheetsManager(CREDS_FILE, SPREADSHEET_ID)
        settings = sheet_mgr.get_settings()

        pause_follow = is_true(settings.get("pause_follow", False))
        follow_limit_per_run = str_to_int(settings.get("follow_limit_per_run"), 0)
        if pause_follow or follow_limit_per_run <= 0:
            logger.info("Follow sender is disabled by pause_follow/follow_limit_per_run settings.")
            return

        api_client = XApiClient(settings)
        
        limit_str = settings.get("after_follow_times", 5)
        limit = str_to_int(limit_str, 5)
        
        logger.info(f"\n--- [未処理アカウントの後追いフォロー] ---")
        logger.info(f"今回の上限: {limit} 件")

        targets = sheet_mgr.get_unprocessed_follow_targets(limit)
        if not targets:
             logger.info("対象の未処理アカウントはありませんでした。")
             return

        success_count = 0

        for target in targets:
            username = target["username"]
            logger.info(f"ユーザー: {username} に対してフォローを実行します...")
            
            user_id = api_client.get_user_id_by_username(username)
            if not user_id:
                logger.warning(f"{username} のIDが取得できませんでした (鍵垢や削除済みの可能性など)。")
                sheet_mgr.update_account_result(username, "失敗(ID取得不能)")
                time.sleep(2)
                continue
                
            result_msg = api_client.follow_user(user_id)
            
            if result_msg:
                sheet_mgr.update_account_result(username, result_msg)
                if "成功" in result_msg:
                    success_count += 1
            
            time.sleep(3)

        logger.info("\n=== バッチ処理が完了しました ===")
        logger.info(f"後追いフォロー成功数: {success_count} / {len(targets)}")

    except Exception as e:
        logger.error(f"想定外の致命的なエラーが発生しました: {e}", exc_info=True)


if __name__ == "__main__":
    main()
