#!/usr/bin/env python3
"""
Step 2: Financial Health & Fundamental Analysis for Chegg (CHGG)
Analyzes financial deterioration, revenue decline, margin compression, and liquidity risks.
"""

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import json
from pathlib import Path
from datetime import datetime

# Configuration
SESSION_DIR = Path('/app/sandbox/session_20260203_085912_030e6e80a419')
DATA_DIR = SESSION_DIR / 'data'
RESULTS_DIR = SESSION_DIR / 'results'
FIGURES_DIR = SESSION_DIR / 'figures'

# Ensure output directories exist
RESULTS_DIR.mkdir(exist_ok=True)
FIGURES_DIR.mkdir(exist_ok=True)

# Set matplotlib backend and style
plt.switch_backend('Agg')
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 10
plt.rcParams['axes.linewidth'] = 0.5
plt.rcParams['axes.grid'] = True
plt.rcParams['grid.alpha'] = 0.3

print("=" * 60)
print("STEP 2: Financial Health & Fundamental Analysis - Chegg (CHGG)")
print("=" * 60)

# -----------------------------------------------------------------------------
# 1. LOAD AND CLEAN DATA
# -----------------------------------------------------------------------------
print("\n[1/6] Loading financial data...")

def load_and_clean_csv(filepath, data_type=""):
    """Load CSV, parse dates, sort by date, and clean numeric values."""
    df = pd.read_csv(filepath)
    df['Date'] = pd.to_datetime(df['Date'])
    df = df.sort_values('Date').reset_index(drop=True)

    # Replace empty strings and missing values
    for col in df.columns:
        if col != 'Date':
            df[col] = pd.to_numeric(df[col], errors='coerce')

    print(f"  Loaded {data_type}: {len(df)} records from {df['Date'].min().date()} to {df['Date'].max().date()}")
    return df

# Load annual data
income_annual = load_and_clean_csv(DATA_DIR / 'chgg_income_statement_annual.csv', 'Annual Income Statement')
balance_annual = load_and_clean_csv(DATA_DIR / 'chgg_balance_sheet_annual.csv', 'Annual Balance Sheet')
cashflow_annual = load_and_clean_csv(DATA_DIR / 'chgg_cash_flow_annual.csv', 'Annual Cash Flow')

# Load quarterly data
income_quarterly = load_and_clean_csv(DATA_DIR / 'chgg_income_statement_quarterly.csv', 'Quarterly Income Statement')
balance_quarterly = load_and_clean_csv(DATA_DIR / 'chgg_balance_sheet_quarterly.csv', 'Quarterly Balance Sheet')
cashflow_quarterly = load_and_clean_csv(DATA_DIR / 'chgg_cash_flow_quarterly.csv', 'Quarterly Cash Flow')

# Load key stats
with open(DATA_DIR / 'chgg_key_stats.json', 'r') as f:
    key_stats = json.load(f)
print(f"  Loaded Key Stats: {len(key_stats)} metrics")

# -----------------------------------------------------------------------------
# 2. CALCULATE GROWTH RATES
# -----------------------------------------------------------------------------
print("\n[2/6] Calculating growth rates...")

def calc_growth_rate(series):
    """Calculate period-over-period growth rate."""
    return series.pct_change() * 100

# Annual growth rates
annual_metrics = pd.DataFrame({
    'Date': income_annual['Date'],
    'Total_Revenue': income_annual['Total Revenue'],
    'Gross_Profit': income_annual['Gross Profit'],
    'Operating_Income': income_annual['Operating Income'],
    'Net_Income': income_annual['Net Income'],
})

annual_metrics['Revenue_YoY_Growth'] = calc_growth_rate(annual_metrics['Total_Revenue'])
annual_metrics['Gross_Profit_YoY_Growth'] = calc_growth_rate(annual_metrics['Gross_Profit'])
annual_metrics['Operating_Income_YoY_Growth'] = calc_growth_rate(annual_metrics['Operating_Income'])
annual_metrics['Net_Income_YoY_Growth'] = calc_growth_rate(annual_metrics['Net_Income'])

# Quarterly growth rates (QoQ)
quarterly_metrics = pd.DataFrame({
    'Date': income_quarterly['Date'],
    'Total_Revenue': income_quarterly['Total Revenue'],
    'Gross_Profit': income_quarterly['Gross Profit'],
    'Operating_Income': income_quarterly['Operating Income'],
    'Net_Income': income_quarterly['Net Income'],
})
# Filter out rows with all NaN financial data
quarterly_metrics = quarterly_metrics.dropna(subset=['Total_Revenue'])

quarterly_metrics['Revenue_QoQ_Growth'] = calc_growth_rate(quarterly_metrics['Total_Revenue'])
quarterly_metrics['Gross_Profit_QoQ_Growth'] = calc_growth_rate(quarterly_metrics['Gross_Profit'])

print(f"  Annual metrics calculated: {len(annual_metrics)} years")
print(f"  Quarterly metrics calculated: {len(quarterly_metrics)} quarters")

# -----------------------------------------------------------------------------
# 3. CALCULATE PROFITABILITY MARGINS
# -----------------------------------------------------------------------------
print("\n[3/6] Calculating profitability margins...")

# Annual margins
annual_metrics['Gross_Margin'] = (annual_metrics['Gross_Profit'] / annual_metrics['Total_Revenue']) * 100
annual_metrics['Operating_Margin'] = (annual_metrics['Operating_Income'] / annual_metrics['Total_Revenue']) * 100
annual_metrics['Net_Profit_Margin'] = (annual_metrics['Net_Income'] / annual_metrics['Total_Revenue']) * 100

# Quarterly margins
quarterly_metrics['Gross_Margin'] = (quarterly_metrics['Gross_Profit'] / quarterly_metrics['Total_Revenue']) * 100
quarterly_metrics['Operating_Margin'] = (quarterly_metrics['Operating_Income'] / quarterly_metrics['Total_Revenue']) * 100
quarterly_metrics['Net_Profit_Margin'] = (quarterly_metrics['Net_Income'] / quarterly_metrics['Total_Revenue']) * 100

print("  Margin calculations complete")
print(f"  Latest Annual Gross Margin: {annual_metrics['Gross_Margin'].iloc[-1]:.1f}%")
print(f"  Latest Annual Operating Margin: {annual_metrics['Operating_Margin'].iloc[-1]:.1f}%")
print(f"  Latest Annual Net Profit Margin: {annual_metrics['Net_Profit_Margin'].iloc[-1]:.1f}%")

# -----------------------------------------------------------------------------
# 4. CALCULATE SOLVENCY & LIQUIDITY METRICS
# -----------------------------------------------------------------------------
print("\n[4/6] Calculating solvency & liquidity metrics...")

# Annual solvency metrics
solvency_annual = pd.DataFrame({
    'Date': balance_annual['Date'],
    'Total_Cash': balance_annual['Cash Cash Equivalents And Short Term Investments'],
    'Total_Debt': balance_annual['Total Debt'],
    'Total_Equity': balance_annual['Stockholders Equity'],
    'Current_Assets': balance_annual['Current Assets'],
    'Current_Liabilities': balance_annual['Current Liabilities'],
    'Total_Assets': balance_annual['Total Assets'],
})

solvency_annual['Current_Ratio'] = solvency_annual['Current_Assets'] / solvency_annual['Current_Liabilities']
solvency_annual['Debt_to_Equity'] = solvency_annual['Total_Debt'] / solvency_annual['Total_Equity']
solvency_annual['Net_Debt'] = solvency_annual['Total_Debt'] - solvency_annual['Total_Cash']
solvency_annual['Cash_to_Debt_Ratio'] = solvency_annual['Total_Cash'] / solvency_annual['Total_Debt']

# Quarterly solvency metrics
solvency_quarterly = pd.DataFrame({
    'Date': balance_quarterly['Date'],
    'Total_Cash': balance_quarterly['Cash Cash Equivalents And Short Term Investments'],
    'Total_Debt': balance_quarterly['Total Debt'],
    'Total_Equity': balance_quarterly['Stockholders Equity'],
    'Current_Assets': balance_quarterly['Current Assets'],
    'Current_Liabilities': balance_quarterly['Current Liabilities'],
})
solvency_quarterly = solvency_quarterly.dropna(subset=['Total_Debt'])

solvency_quarterly['Current_Ratio'] = solvency_quarterly['Current_Assets'] / solvency_quarterly['Current_Liabilities']
solvency_quarterly['Debt_to_Equity'] = solvency_quarterly['Total_Debt'] / solvency_quarterly['Total_Equity']
solvency_quarterly['Net_Debt'] = solvency_quarterly['Total_Debt'] - solvency_quarterly['Total_Cash']

print(f"  Latest Annual Current Ratio: {solvency_annual['Current_Ratio'].iloc[-1]:.2f}")
print(f"  Latest Annual Debt-to-Equity: {solvency_annual['Debt_to_Equity'].iloc[-1]:.2f}")
print(f"  Latest Net Debt: ${solvency_annual['Net_Debt'].iloc[-1]/1e6:.1f}M")

# -----------------------------------------------------------------------------
# 5. CALCULATE CASH FLOW & BURN RATE
# -----------------------------------------------------------------------------
print("\n[5/6] Calculating cash flow and burn rate...")

# Annual cash flow
cashflow_metrics = pd.DataFrame({
    'Date': cashflow_annual['Date'],
    'Operating_Cash_Flow': cashflow_annual['Operating Cash Flow'],
    'Capital_Expenditure': cashflow_annual['Capital Expenditure'].abs(),
    'Free_Cash_Flow': cashflow_annual['Free Cash Flow'],
})

# Quarterly cash flow for burn rate
cashflow_quarterly_clean = cashflow_quarterly.dropna(subset=['Operating Cash Flow'])
quarterly_fcf = pd.DataFrame({
    'Date': cashflow_quarterly_clean['Date'],
    'Operating_Cash_Flow': cashflow_quarterly_clean['Operating Cash Flow'],
    'Capital_Expenditure': cashflow_quarterly_clean['Capital Expenditure'].abs() if 'Capital Expenditure' in cashflow_quarterly_clean else 0,
    'Free_Cash_Flow': cashflow_quarterly_clean['Free Cash Flow'],
})

# Calculate quarterly burn rate (negative FCF = burning cash)
quarterly_fcf['Cash_Burn'] = -quarterly_fcf['Free_Cash_Flow']

# Get recent quarters for burn rate estimation (last 4 quarters with data)
recent_quarters = quarterly_fcf.tail(4)
avg_quarterly_burn = recent_quarters['Cash_Burn'].mean()
latest_quarterly_burn = quarterly_fcf['Cash_Burn'].iloc[-1] if len(quarterly_fcf) > 0 else 0

# Get latest cash position
latest_cash = solvency_quarterly['Total_Cash'].iloc[-1] if len(solvency_quarterly) > 0 else solvency_annual['Total_Cash'].iloc[-1]
latest_debt = solvency_quarterly['Total_Debt'].iloc[-1] if len(solvency_quarterly) > 0 else solvency_annual['Total_Debt'].iloc[-1]

# Calculate cash runway
if avg_quarterly_burn > 0:
    cash_runway_quarters = latest_cash / avg_quarterly_burn
    cash_runway_months = cash_runway_quarters * 3
else:
    cash_runway_quarters = float('inf')  # Positive cash flow
    cash_runway_months = float('inf')

print(f"  Latest Quarterly FCF: ${quarterly_fcf['Free_Cash_Flow'].iloc[-1]/1e6:.1f}M")
print(f"  Average Quarterly Cash Burn (recent): ${avg_quarterly_burn/1e6:.1f}M")
print(f"  Latest Cash Position: ${latest_cash/1e6:.1f}M")
print(f"  Estimated Cash Runway: {cash_runway_quarters:.1f} quarters ({cash_runway_months:.0f} months)")

# -----------------------------------------------------------------------------
# 6. GENERATE VISUALIZATIONS
# -----------------------------------------------------------------------------
print("\n[6/6] Generating visualizations...")

# Color palette for consistent styling
COLORS = {
    'revenue': '#2E86AB',    # Blue
    'profit': '#28A745',     # Green
    'loss': '#DC3545',       # Red
    'cash': '#17A2B8',       # Cyan
    'debt': '#FFC107',       # Amber
    'margin_gross': '#6C757D',    # Gray
    'margin_operating': '#E83E8C', # Pink
    'margin_net': '#6610F2',       # Purple
}

# -------------------------
# Figure 1: Revenue & Net Income Trend
# -------------------------
print("  Creating revenue_profit_trend.png...")
fig, ax1 = plt.subplots(figsize=(10, 6))

# Revenue bars
years = annual_metrics['Date'].dt.year.values
x = np.arange(len(years))
width = 0.35

# Convert to millions
revenue_m = annual_metrics['Total_Revenue'] / 1e6
net_income_m = annual_metrics['Net_Income'] / 1e6

bars1 = ax1.bar(x - width/2, revenue_m, width, label='Total Revenue', color=COLORS['revenue'], alpha=0.8)
bars2 = ax1.bar(x + width/2, net_income_m, width, label='Net Income',
                color=[COLORS['profit'] if v >= 0 else COLORS['loss'] for v in net_income_m], alpha=0.8)

ax1.set_xlabel('Fiscal Year', fontsize=11)
ax1.set_ylabel('Amount ($ Millions)', fontsize=11)
ax1.set_title('Chegg (CHGG) - Revenue & Net Income Trend\nFinancial Deterioration 2021-2024', fontsize=12, fontweight='bold')
ax1.set_xticks(x)
ax1.set_xticklabels(years)
ax1.axhline(y=0, color='black', linestyle='-', linewidth=0.5)
ax1.legend(loc='upper right')

# Add value labels
for bar in bars1:
    height = bar.get_height()
    ax1.annotate(f'${height:.0f}M',
                xy=(bar.get_x() + bar.get_width() / 2, height),
                xytext=(0, 3), textcoords="offset points",
                ha='center', va='bottom', fontsize=8)

for bar in bars2:
    height = bar.get_height()
    ax1.annotate(f'${height:.0f}M',
                xy=(bar.get_x() + bar.get_width() / 2, height),
                xytext=(0, 3 if height >= 0 else -10), textcoords="offset points",
                ha='center', va='bottom' if height >= 0 else 'top', fontsize=8)

# Add trend annotation
revenue_decline = ((annual_metrics['Total_Revenue'].iloc[-1] - annual_metrics['Total_Revenue'].iloc[0]) /
                   annual_metrics['Total_Revenue'].iloc[0] * 100)
ax1.text(0.02, 0.98, f'Revenue Decline (2021-2024): {revenue_decline:.1f}%',
         transform=ax1.transAxes, fontsize=9, verticalalignment='top',
         bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))

plt.tight_layout()
plt.savefig(FIGURES_DIR / 'revenue_profit_trend.png', dpi=300, bbox_inches='tight')
plt.close()
print("    Saved: figures/revenue_profit_trend.png")

# -------------------------
# Figure 2: Margin Erosion
# -------------------------
print("  Creating margin_erosion.png...")
fig, ax = plt.subplots(figsize=(10, 6))

ax.plot(annual_metrics['Date'], annual_metrics['Gross_Margin'],
        marker='o', linewidth=2, markersize=8, label='Gross Margin', color=COLORS['margin_gross'])
ax.plot(annual_metrics['Date'], annual_metrics['Operating_Margin'],
        marker='s', linewidth=2, markersize=8, label='Operating Margin', color=COLORS['margin_operating'])
ax.plot(annual_metrics['Date'], annual_metrics['Net_Profit_Margin'],
        marker='^', linewidth=2, markersize=8, label='Net Profit Margin', color=COLORS['margin_net'])

ax.axhline(y=0, color='black', linestyle='--', linewidth=1, alpha=0.5)
ax.set_xlabel('Fiscal Year', fontsize=11)
ax.set_ylabel('Margin (%)', fontsize=11)
ax.set_title('Chegg (CHGG) - Margin Erosion Analysis\nProfitability Compression 2021-2024', fontsize=12, fontweight='bold')
ax.legend(loc='lower left')

# Format x-axis
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
ax.xaxis.set_major_locator(mdates.YearLocator())

# Add data labels
for idx, row in annual_metrics.iterrows():
    ax.annotate(f'{row["Gross_Margin"]:.1f}%', (row['Date'], row['Gross_Margin']),
                textcoords="offset points", xytext=(0, 8), ha='center', fontsize=8)

# Add margin decline annotation
gross_margin_decline = annual_metrics['Gross_Margin'].iloc[-1] - annual_metrics['Gross_Margin'].iloc[0]
ax.text(0.02, 0.02, f'Gross Margin Change: {gross_margin_decline:+.1f} pp\nNet Margin fell to -135.5% in 2024',
        transform=ax.transAxes, fontsize=9, verticalalignment='bottom',
        bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))

plt.tight_layout()
plt.savefig(FIGURES_DIR / 'margin_erosion.png', dpi=300, bbox_inches='tight')
plt.close()
print("    Saved: figures/margin_erosion.png")

# -------------------------
# Figure 3: Cash vs Debt
# -------------------------
print("  Creating cash_vs_debt.png...")
fig, ax = plt.subplots(figsize=(10, 6))

years = solvency_annual['Date'].dt.year.values
x = np.arange(len(years))
width = 0.35

cash_m = solvency_annual['Total_Cash'] / 1e6
debt_m = solvency_annual['Total_Debt'] / 1e6
net_debt_m = solvency_annual['Net_Debt'] / 1e6

bars1 = ax.bar(x - width/2, cash_m, width, label='Total Cash', color=COLORS['cash'], alpha=0.8)
bars2 = ax.bar(x + width/2, debt_m, width, label='Total Debt', color=COLORS['debt'], alpha=0.8)

# Plot net debt as line
ax2 = ax.twinx()
ax2.plot(x, net_debt_m, marker='D', linewidth=2, markersize=8, label='Net Debt', color=COLORS['loss'])
ax2.axhline(y=0, color='gray', linestyle='--', linewidth=0.5)
ax2.set_ylabel('Net Debt ($ Millions)', fontsize=11, color=COLORS['loss'])
ax2.tick_params(axis='y', labelcolor=COLORS['loss'])

ax.set_xlabel('Fiscal Year', fontsize=11)
ax.set_ylabel('Amount ($ Millions)', fontsize=11)
ax.set_title('Chegg (CHGG) - Cash Position vs Debt Obligations\nLiquidity Risk Assessment 2021-2024', fontsize=12, fontweight='bold')
ax.set_xticks(x)
ax.set_xticklabels(years)

# Combined legend
lines1, labels1 = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax.legend(lines1 + lines2, labels1 + labels2, loc='upper right')

# Add value labels on bars
for bar in bars1:
    height = bar.get_height()
    ax.annotate(f'${height:.0f}M',
                xy=(bar.get_x() + bar.get_width() / 2, height),
                xytext=(0, 3), textcoords="offset points",
                ha='center', va='bottom', fontsize=8)

for bar in bars2:
    height = bar.get_height()
    ax.annotate(f'${height:.0f}M',
                xy=(bar.get_x() + bar.get_width() / 2, height),
                xytext=(0, 3), textcoords="offset points",
                ha='center', va='bottom', fontsize=8)

# Add cash runway annotation
if cash_runway_months != float('inf'):
    ax.text(0.02, 0.98, f'Cash Runway: ~{cash_runway_months:.0f} months\nLatest Cash: ${latest_cash/1e6:.0f}M | Debt: ${latest_debt/1e6:.0f}M',
            transform=ax.transAxes, fontsize=9, verticalalignment='top',
            bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))
else:
    ax.text(0.02, 0.98, f'Positive FCF - No immediate liquidity crisis\nLatest Cash: ${latest_cash/1e6:.0f}M | Debt: ${latest_debt/1e6:.0f}M',
            transform=ax.transAxes, fontsize=9, verticalalignment='top',
            bbox=dict(boxstyle='round', facecolor='lightgreen', alpha=0.5))

plt.tight_layout()
plt.savefig(FIGURES_DIR / 'cash_vs_debt.png', dpi=300, bbox_inches='tight')
plt.close()
print("    Saved: figures/cash_vs_debt.png")

# -----------------------------------------------------------------------------
# 7. SAVE FINANCIAL METRICS HISTORY CSV
# -----------------------------------------------------------------------------
print("\n[7/7] Saving results...")

# Merge annual metrics
combined_annual = annual_metrics.merge(solvency_annual, on='Date', how='outer')
combined_annual = combined_annual.merge(cashflow_metrics, on='Date', how='outer')

# Round and format
for col in combined_annual.columns:
    if col != 'Date' and combined_annual[col].dtype in ['float64', 'float32']:
        combined_annual[col] = combined_annual[col].round(2)

combined_annual.to_csv(RESULTS_DIR / 'financial_metrics_history.csv', index=False)
print(f"  Saved: results/financial_metrics_history.csv ({len(combined_annual)} rows)")

# -----------------------------------------------------------------------------
# 8. GENERATE SUMMARY REPORT
# -----------------------------------------------------------------------------

# Calculate key summary statistics
peak_revenue = annual_metrics['Total_Revenue'].max()
latest_revenue = annual_metrics['Total_Revenue'].iloc[-1]
revenue_decline_pct = ((latest_revenue - peak_revenue) / peak_revenue) * 100

# Year-over-year declines
yoy_declines = annual_metrics[['Date', 'Revenue_YoY_Growth']].dropna()

# Margin analysis
peak_gross_margin = annual_metrics['Gross_Margin'].max()
latest_gross_margin = annual_metrics['Gross_Margin'].iloc[-1]
peak_operating_margin = annual_metrics['Operating_Margin'].max()
latest_operating_margin = annual_metrics['Operating_Margin'].iloc[-1]

summary_text = f"""
================================================================================
CHEGG INC. (CHGG) - FINANCIAL HEALTH SUMMARY
================================================================================
Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
Analysis Period: 2021 - 2024 (Annual) + Recent Quarters

================================================================================
1. REVENUE DETERIORATION
================================================================================
Peak Annual Revenue (2021):     ${peak_revenue/1e6:,.1f} Million
Latest Annual Revenue (2024):   ${latest_revenue/1e6:,.1f} Million
Revenue Decline from Peak:      {revenue_decline_pct:.1f}%

Year-over-Year Revenue Growth:
  - 2022: {annual_metrics['Revenue_YoY_Growth'].iloc[1]:.1f}%
  - 2023: {annual_metrics['Revenue_YoY_Growth'].iloc[2]:.1f}%
  - 2024: {annual_metrics['Revenue_YoY_Growth'].iloc[3]:.1f}%

Current Revenue Growth Rate:    {key_stats.get('revenueGrowth', 0) * 100:.1f}% (trailing)

Key Insight: Revenue has declined {abs(revenue_decline_pct):.1f}% from 2021 peak,
with accelerating deterioration (-7.6% in 2023 to -13.8% in 2024). This reflects
structural disruption from AI competition (ChatGPT) in the education sector.

================================================================================
2. MARGIN COMPRESSION
================================================================================
Gross Margin:
  - Peak (2021):    {peak_gross_margin:.1f}%
  - Latest (2024):  {latest_gross_margin:.1f}%
  - Change:         {latest_gross_margin - peak_gross_margin:+.1f} percentage points

Operating Margin:
  - Peak (2022):    {peak_operating_margin:.1f}%
  - Latest (2024):  {latest_operating_margin:.1f}%
  - Change:         {latest_operating_margin - peak_operating_margin:+.1f} percentage points

Net Profit Margin:
  - 2021: {annual_metrics['Net_Profit_Margin'].iloc[0]:.1f}%
  - 2022: {annual_metrics['Net_Profit_Margin'].iloc[1]:.1f}%
  - 2023: {annual_metrics['Net_Profit_Margin'].iloc[2]:.1f}%
  - 2024: {annual_metrics['Net_Profit_Margin'].iloc[3]:.1f}%

Key Insight: Net profit margin collapsed to -135.5% in 2024, driven by massive
goodwill impairment charges ($677M) reflecting write-down of intangible assets
as AI disruption destroys the company's competitive moat.

================================================================================
3. LIQUIDITY & SOLVENCY ANALYSIS
================================================================================
Latest Cash Position:           ${latest_cash/1e6:,.1f} Million
Latest Total Debt:              ${latest_debt/1e6:,.1f} Million
Net Debt Position:              ${(latest_debt - latest_cash)/1e6:,.1f} Million

Current Ratio (Latest):         {key_stats.get('currentRatio', 0):.2f}
Quick Ratio (Latest):           {key_stats.get('quickRatio', 0):.2f}
Debt-to-Equity Ratio:           {key_stats.get('debtToEquity', 0):.1f}%

Historical Debt Evolution:
  - 2021: ${solvency_annual['Total_Debt'].iloc[0]/1e6:,.0f}M
  - 2022: ${solvency_annual['Total_Debt'].iloc[1]/1e6:,.0f}M
  - 2023: ${solvency_annual['Total_Debt'].iloc[2]/1e6:,.0f}M
  - 2024: ${solvency_annual['Total_Debt'].iloc[3]/1e6:,.0f}M

Key Insight: Debt has been reduced significantly from $1.7B (2021) to $504M (2024)
through aggressive deleveraging. However, current ratio < 1.0 indicates short-term
liquidity stress, with current liabilities exceeding current assets.

================================================================================
4. CASH FLOW & BURN RATE ANALYSIS
================================================================================
Annual Free Cash Flow Trend:
  - 2021: ${cashflow_metrics['Free_Cash_Flow'].iloc[0]/1e6:,.1f}M
  - 2022: ${cashflow_metrics['Free_Cash_Flow'].iloc[1]/1e6:,.1f}M
  - 2023: ${cashflow_metrics['Free_Cash_Flow'].iloc[2]/1e6:,.1f}M
  - 2024: ${cashflow_metrics['Free_Cash_Flow'].iloc[3]/1e6:,.1f}M

Recent Quarterly Free Cash Flow:
"""

# Add quarterly FCF data
for idx, row in quarterly_fcf.tail(4).iterrows():
    summary_text += f"  - {row['Date'].strftime('%Y-Q%q' if hasattr(row['Date'], 'quarter') else '%Y-%m')}: ${row['Free_Cash_Flow']/1e6:.1f}M\n"

summary_text += f"""
Average Quarterly Cash Burn:    ${abs(avg_quarterly_burn)/1e6:.1f}M {'(burning)' if avg_quarterly_burn > 0 else '(generating)'}
Latest Quarterly FCF:           ${quarterly_fcf['Free_Cash_Flow'].iloc[-1]/1e6:.1f}M

CASH RUNWAY ESTIMATE:
  - Current Cash:               ${latest_cash/1e6:.1f}M
  - Avg Quarterly Burn:         ${abs(avg_quarterly_burn)/1e6:.1f}M
  - Estimated Runway:           {'Positive FCF - No immediate risk' if avg_quarterly_burn <= 0 else f'{cash_runway_quarters:.1f} quarters (~{cash_runway_months:.0f} months)'}

Key Insight: Despite revenue collapse, Chegg has maintained positive free cash flow
through aggressive cost cutting and debt reduction. However, the structural decline
in core business raises questions about long-term viability.

================================================================================
5. KEY METRICS FOR INVESTMENT THESIS (SHORT)
================================================================================
Market Cap:                     ${key_stats.get('marketCap', 0)/1e6:.1f}M
Enterprise Value:               ${key_stats.get('enterpriseValue', 0)/1e6:.1f}M
Price-to-Book:                  {key_stats.get('priceToBook', 0):.2f}x
Price-to-Sales (TTM):           {key_stats.get('priceToSalesTrailing12Months', 0):.2f}x
EV/Revenue:                     {key_stats.get('enterpriseToRevenue', 0):.2f}x
EV/EBITDA:                      {key_stats.get('enterpriseToEbitda', 0):.2f}x

Short Interest:
  - Shares Short:               {key_stats.get('sharesShort', 0):,}
  - Short Ratio (Days to Cover): {key_stats.get('shortRatio', 0):.2f}
  - Short % of Float:           {key_stats.get('shortPercentOfFloat', 0)*100:.1f}%

52-Week Range:                  ${key_stats.get('fiftyTwoWeekLow', 0):.2f} - ${key_stats.get('fiftyTwoWeekHigh', 0):.2f}
Beta:                           {key_stats.get('beta', 0):.2f}

================================================================================
6. FINANCIAL DETERIORATION SUMMARY FOR SHORT THESIS
================================================================================
1. REVENUE COLLAPSE: {abs(revenue_decline_pct):.0f}% decline from 2021 peak, accelerating
   downward trajectory with -43% TTM growth rate reflecting AI disruption.

2. MARGIN DESTRUCTION: Net profit margin fell from near-breakeven to -135.5%,
   indicating fundamental business model breakdown.

3. ASSET IMPAIRMENT: $677M goodwill write-down in 2024 reflects management
   acknowledgment that AI has permanently impaired the business.

4. LIQUIDITY STRESS: Current ratio below 1.0 despite debt reduction,
   short-term obligations exceed liquid assets.

5. VALUATION DISCONNECT: Trading at distressed multiples (0.52x book,
   0.17x sales) but still pricing in survival scenario.

CONCLUSION: Financial metrics support short thesis - structural decline
with no clear path to recovery as AI alternatives eliminate demand for
traditional homework help services.

================================================================================
Files Generated:
- results/financial_metrics_history.csv
- figures/revenue_profit_trend.png
- figures/margin_erosion.png
- figures/cash_vs_debt.png
================================================================================
"""

with open(RESULTS_DIR / 'financial_health_summary.txt', 'w') as f:
    f.write(summary_text)
print(f"  Saved: results/financial_health_summary.txt")

print("\n" + "=" * 60)
print("STEP 2 COMPLETE: Financial Health Analysis")
print("=" * 60)
print(f"\nOutputs generated:")
print(f"  - results/financial_metrics_history.csv")
print(f"  - results/financial_health_summary.txt")
print(f"  - figures/revenue_profit_trend.png")
print(f"  - figures/margin_erosion.png")
print(f"  - figures/cash_vs_debt.png")
