import os
import argparse
import logging
from dotenv import load_dotenv

# Load environment variables
load_dotenv()

from src.utils.bitbucket_client import BitbucketClient
from src.utils.ai_reviewer import AIReviewer

# Configure logging
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
logger = logging.getLogger(__name__)

def run_manual_review(url: str):
    try:
        logger.info(f"Starting manual review for URL: {url}")
        
        bb_client = BitbucketClient()
        ai_reviewer = AIReviewer()

        # 1. Parse URL
        params = bb_client.parse_url(url)
        workspace = params['workspace']
        repo_slug = params['repo_slug']
        pr_id = params['pr_id']

        logger.info(f"Detected PR #{pr_id} in {workspace}/{repo_slug}")

        # 2. Fetch Diff
        logger.info("Fetching diff from Bitbucket...")
        diff_content = bb_client.get_diff(workspace, repo_slug, pr_id)
        
        # 3. AI Review
        logger.info("Sending diff to AI for review (this may take a moment)...")
        review_summary = ai_reviewer.review_diff(diff_content)
        
        # 4. Print Summary
        print("\n" + "="*50)
        print("AI CODE REVIEW SUMMARY")
        print("="*50 + "\n")
        print(review_summary)
        print("\n" + "="*50 + "\n")

    except Exception as e:
        logger.error(f"Manual review failed: {str(e)}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Run a manual AI code review for a Bitbucket PR diff URL.")
    parser.add_url = parser.add_argument("--url", required=True, help="The Bitbucket API diff URL (e.g., https://api.bitbucket.org/2.0/repositories/.../diff)")
    
    args = parser.parse_args()
    run_manual_review(args.url)
