#!/usr/bin/env python3
"""
Google Ads Agency Agent - Quick Status
Get a quick overview of all accounts right now.
"""

import sys
import argparse
from datetime import datetime
from typing import Dict

from core import (
    get_client, ACCOUNTS, run_query,
    micros_to_currency, format_currency,
)


def get_account_status(client, account_key: str) -> Dict:
    """Get current status for an account."""
    account = ACCOUNTS[account_key]
    
    # Today's metrics
    query_today = """
        SELECT
            metrics.cost_micros,
            metrics.conversions,
            metrics.clicks,
            metrics.impressions
        FROM customer
        WHERE segments.date DURING TODAY
    """
    
    # Month to date
    query_mtd = """
        SELECT
            metrics.cost_micros,
            metrics.conversions,
            metrics.clicks,
            metrics.impressions
        FROM customer
        WHERE segments.date DURING THIS_MONTH
    """
    
    today = run_query(client, account['id'], query_today)
    mtd = run_query(client, account['id'], query_mtd)
    
    def extract_metrics(results):
        if not results:
            return {'cost': 0, 'conversions': 0, 'clicks': 0, 'impressions': 0}
        row = results[0]
        return {
            'cost': micros_to_currency(row.metrics.cost_micros),
            'conversions': row.metrics.conversions,
            'clicks': row.metrics.clicks,
            'impressions': row.metrics.impressions,
        }
    
    today_data = extract_metrics(today)
    mtd_data = extract_metrics(mtd)
    
    return {
        'name': account['name'],
        'today': today_data,
        'mtd': mtd_data,
        'today_cpa': today_data['cost'] / today_data['conversions'] if today_data['conversions'] > 0 else 0,
        'mtd_cpa': mtd_data['cost'] / mtd_data['conversions'] if mtd_data['conversions'] > 0 else 0,
    }


def get_all_status() -> Dict:
    """Get status for all accounts."""
    client = get_client()
    
    statuses = {}
    for account_key in ACCOUNTS:
        try:
            statuses[account_key] = get_account_status(client, account_key)
        except Exception as e:
            statuses[account_key] = {'error': str(e)}
    
    return statuses


def format_quick_status(statuses: Dict) -> str:
    """Format quick status for display."""
    output = "📊 **Google Ads Status**\n"
    output += f"_{datetime.now().strftime('%B %d, %H:%M')}_\n\n"
    
    total_today_cost = 0
    total_today_conv = 0
    total_mtd_cost = 0
    total_mtd_conv = 0
    
    for key, status in statuses.items():
        if 'error' in status:
            output += f"⚠️ **{ACCOUNTS[key]['name']}:** Error - {status['error']}\n\n"
            continue
        
        name = status['name']
        today = status['today']
        mtd = status['mtd']
        
        total_today_cost += today['cost']
        total_today_conv += today['conversions']
        total_mtd_cost += mtd['cost']
        total_mtd_conv += mtd['conversions']
        
        today_cpa = format_currency(status['today_cpa']) if status['today_cpa'] > 0 else "—"
        mtd_cpa = format_currency(status['mtd_cpa']) if status['mtd_cpa'] > 0 else "—"
        
        output += f"**{name}**\n"
        output += f"Today: {format_currency(today['cost'])} | {today['conversions']:.0f} conv | CPA: {today_cpa}\n"
        output += f"MTD: {format_currency(mtd['cost'])} | {mtd['conversions']:.0f} conv | CPA: {mtd_cpa}\n\n"
    
    # Totals
    output += "━━━━━━━━━━━━━━━━━━━━\n"
    output += "**TOTAL**\n"
    total_today_cpa = total_today_cost / total_today_conv if total_today_conv > 0 else 0
    total_mtd_cpa = total_mtd_cost / total_mtd_conv if total_mtd_conv > 0 else 0
    
    output += f"Today: {format_currency(total_today_cost)} | {total_today_conv:.0f} conv | CPA: {format_currency(total_today_cpa)}\n"
    output += f"MTD: {format_currency(total_mtd_cost)} | {total_mtd_conv:.0f} conv | CPA: {format_currency(total_mtd_cpa)}\n"
    
    return output


def main():
    parser = argparse.ArgumentParser(description="Quick Google Ads status")
    parser.add_argument("--json", action="store_true", help="Output as JSON")
    args = parser.parse_args()
    
    statuses = get_all_status()
    
    if args.json:
        import json
        print(json.dumps(statuses, indent=2))
    else:
        print(format_quick_status(statuses))


if __name__ == "__main__":
    main()
