#!/usr/bin/env python3
"""
Step 2: Comparative Matrix Construction & Exploratory Data Analysis

This script performs EDA on Redwood and Indian tree datasets, creates a normalized
comparative matrix, and generates 8 visualizations comparing ecological and tourism metrics.

Author: K-Dense System (DendroForge)
Date: 2025-12-27
"""

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pathlib import Path
import warnings
warnings.filterwarnings('ignore')

# Set reproducibility
np.random.seed(42)

# Configure matplotlib for non-interactive backend
plt.switch_backend('Agg')
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.size'] = 10
plt.rcParams['axes.linewidth'] = 0.8
plt.rcParams['figure.dpi'] = 300

# Define paths (absolute paths required)
BASE_DIR = Path('/app/sandbox/session_20251227_090118_524452720570')
DATA_DIR = BASE_DIR / 'workflow' / 'data'
FIGURES_DIR = BASE_DIR / 'figures'
RESULTS_DIR = BASE_DIR / 'results'

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

print("=" * 80)
print("STEP 2: COMPARATIVE MATRIX CONSTRUCTION & EDA")
print("=" * 80)

# =============================================================================
# 1. LOAD DATASETS
# =============================================================================
print("\n[1/5] Loading datasets...")

redwood_df = pd.read_csv(DATA_DIR / 'redwood_stats.csv')
indian_df = pd.read_csv(DATA_DIR / 'indian_trees_stats.csv')

print(f"  ✓ Loaded Redwood dataset: {redwood_df.shape}")
print(f"  ✓ Loaded Indian trees dataset: {indian_df.shape}")
print(f"\nRedwood columns: {list(redwood_df.columns)}")
print(f"Indian trees columns: {list(indian_df.columns)}")

# =============================================================================
# 2. DATA PROCESSING
# =============================================================================
print("\n[2/5] Processing data...")

# Calculate Tourism Potential Score for Indian trees
# Average of Cultural_Significance, Accessibility, and Awe_Factor (all on 1-10 scale)
indian_df['Tourism_Potential_Score'] = indian_df[
    ['Cultural_Significance_1_10', 'Accessibility_1_10', 'Awe_Factor_1_10']
].mean(axis=1)

print(f"  ✓ Calculated Tourism Potential Score for Indian trees")

# Create comparative matrix with common columns
# For Redwoods, we'll add placeholder qualitative scores (mark as N/A)
redwood_comparative = redwood_df.copy()
redwood_comparative['Origin'] = 'Redwood (USA)'
redwood_comparative['Cultural_Significance_1_10'] = np.nan
redwood_comparative['Accessibility_1_10'] = np.nan
redwood_comparative['Awe_Factor_1_10'] = np.nan
redwood_comparative['Tourism_Potential_Score'] = np.nan
redwood_comparative['Current_Tourism_Status'] = redwood_comparative.apply(
    lambda x: 'High' if x['Annual_Visitors_approx'] > 3000000 else 'Medium', axis=1
)

indian_comparative = indian_df.copy()
indian_comparative['Origin'] = 'Indian Tree'
indian_comparative['Biomass_Estimate_tonnes'] = np.nan
indian_comparative['Annual_Visitors_approx'] = np.nan
indian_comparative['Estimated_Revenue_USD_millions'] = np.nan

# Merge datasets
comparative_df = pd.concat([
    redwood_comparative[['Common_Name', 'Origin', 'Max_Height_m', 'Max_Girth_m',
                         'Max_Age_years', 'Cultural_Significance_1_10',
                         'Accessibility_1_10', 'Awe_Factor_1_10',
                         'Tourism_Potential_Score', 'Current_Tourism_Status']],
    indian_comparative[['Common_Name', 'Origin', 'Max_Height_m', 'Max_Girth_m',
                       'Max_Age_years', 'Cultural_Significance_1_10',
                       'Accessibility_1_10', 'Awe_Factor_1_10',
                       'Tourism_Potential_Score', 'Current_Tourism_Status']]
], ignore_index=True)

print(f"  ✓ Created comparative matrix: {comparative_df.shape}")

# Normalize key metrics (Height, Girth, Age) to 0-1 scale
metrics_to_normalize = ['Max_Height_m', 'Max_Girth_m', 'Max_Age_years']
for metric in metrics_to_normalize:
    min_val = comparative_df[metric].min()
    max_val = comparative_df[metric].max()
    comparative_df[f'{metric}_normalized'] = (comparative_df[metric] - min_val) / (max_val - min_val)
    print(f"  ✓ Normalized {metric}: range {min_val:.1f} - {max_val:.1f}")

# =============================================================================
# 3. STATISTICAL SUMMARIES
# =============================================================================
print("\n[3/5] Generating statistical findings...")

findings = []
findings.append("=" * 80)
findings.append("STATISTICAL FINDINGS: REDWOODS vs. INDIAN TREES COMPARISON")
findings.append("=" * 80)
findings.append("")

# Height comparison
redwood_max_height = redwood_df['Max_Height_m'].max()
indian_max_height = indian_df['Max_Height_m'].max()
height_ratio = (indian_max_height / redwood_max_height) * 100
findings.append(f"HEIGHT COMPARISON:")
findings.append(f"  - Tallest Redwood: {redwood_max_height:.2f}m (Coast Redwood)")
findings.append(f"  - Tallest Indian tree: {indian_max_height:.2f}m (Deodar Cedar)")
findings.append(f"  - Deodar Cedar reaches {height_ratio:.1f}% of Coast Redwood height")
findings.append("")

# Girth comparison (note the Great Banyan is unique - canopy perimeter vs trunk)
redwood_max_girth = redwood_df['Max_Girth_m'].max()
indian_max_girth = indian_df['Max_Girth_m'].max()
findings.append(f"GIRTH COMPARISON:")
findings.append(f"  - Largest Redwood girth: {redwood_max_girth:.2f}m (Giant Sequoia trunk)")
findings.append(f"  - Largest Indian tree 'girth': {indian_max_girth:.2f}m (Great Banyan canopy)")
findings.append(f"  - NOTE: Great Banyan measurement is canopy perimeter (aerial root system),")
findings.append(f"    not trunk circumference - not directly comparable to Sequoia")
findings.append(f"  - 2nd largest Indian: {indian_df.nlargest(2, 'Max_Girth_m').iloc[1]['Max_Girth_m']:.2f}m "
               f"({indian_df.nlargest(2, 'Max_Girth_m').iloc[1]['Common_Name']})")
findings.append("")

# Age comparison
redwood_max_age = redwood_df['Max_Age_years'].max()
indian_max_age = indian_df['Max_Age_years'].max()
findings.append(f"LONGEVITY COMPARISON:")
findings.append(f"  - Oldest Redwood: {redwood_max_age:.0f} years (Giant Sequoia)")
findings.append(f"  - Oldest Indian trees: {indian_max_age:.0f} years (Deodar Cedar, Baobab, Portia Tree)")
findings.append(f"  - Indian trees reach {(indian_max_age/redwood_max_age)*100:.1f}% of Giant Sequoia age")
findings.append("")

# Tourism metrics for Indian trees
findings.append(f"TOURISM POTENTIAL (Indian Trees):")
tourism_top3 = indian_df.nlargest(3, 'Tourism_Potential_Score')[
    ['Common_Name', 'Tourism_Potential_Score', 'Current_Tourism_Status']
]
for idx, row in tourism_top3.iterrows():
    findings.append(f"  {idx-1}. {row['Common_Name']}: {row['Tourism_Potential_Score']:.2f}/10 "
                   f"(Status: {row['Current_Tourism_Status']})")
findings.append("")

# Summary statistics
findings.append(f"SUMMARY STATISTICS:")
findings.append(f"  - Average Redwood height: {redwood_df['Max_Height_m'].mean():.1f}m")
findings.append(f"  - Average Indian tree height: {indian_df['Max_Height_m'].mean():.1f}m")
findings.append(f"  - Average Indian Tourism Potential: {indian_df['Tourism_Potential_Score'].mean():.2f}/10")
findings.append(f"  - High tourism status: {len(indian_df[indian_df['Current_Tourism_Status']=='High'])} Indian trees")
findings.append("")

findings_text = "\n".join(findings)
print(findings_text)

# Save findings
with open(RESULTS_DIR / 'eda_findings.txt', 'w') as f:
    f.write(findings_text)
print(f"  ✓ Saved findings to {RESULTS_DIR / 'eda_findings.txt'}")

# =============================================================================
# 4. VISUALIZATION GENERATION
# =============================================================================
print("\n[4/5] Generating visualizations...")

# Color schemes
redwood_color = '#8B4513'  # Saddle brown
indian_colors = plt.cm.Set2(np.linspace(0, 1, len(indian_df)))

# ---------------------------------------------------------------------------
# Figure 1: Maximum Height Comparison (Bar Chart)
# ---------------------------------------------------------------------------
print("  [1/8] Creating Figure 1: Height comparison bar chart...")
fig, ax = plt.subplots(figsize=(12, 6))

# Combine all species for height comparison
height_data = pd.concat([
    redwood_df[['Common_Name', 'Max_Height_m']],
    indian_df[['Common_Name', 'Max_Height_m']]
]).sort_values('Max_Height_m', ascending=False)

colors = ['#8B4513' if name in redwood_df['Common_Name'].values else '#2E8B57'
          for name in height_data['Common_Name']]

bars = ax.barh(range(len(height_data)), height_data['Max_Height_m'], color=colors)
ax.set_yticks(range(len(height_data)))
ax.set_yticklabels(height_data['Common_Name'], fontsize=9)
ax.set_xlabel('Maximum Height (meters)', fontsize=11, fontweight='bold')
ax.set_title('Maximum Height Comparison: Redwoods vs. Indian Trees',
             fontsize=13, fontweight='bold', pad=15)
ax.grid(axis='x', alpha=0.3, linestyle='--')

# Add value labels
for i, (idx, row) in enumerate(height_data.iterrows()):
    ax.text(row['Max_Height_m'] + 1, i, f"{row['Max_Height_m']:.1f}m",
            va='center', fontsize=8)

# Legend
from matplotlib.patches import Patch
legend_elements = [Patch(facecolor='#8B4513', label='Redwood (USA)'),
                   Patch(facecolor='#2E8B57', label='Indian Tree')]
ax.legend(handles=legend_elements, loc='lower right', fontsize=10)

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

# ---------------------------------------------------------------------------
# Figure 2: Maximum Girth Comparison (Bar Chart)
# ---------------------------------------------------------------------------
print("  [2/8] Creating Figure 2: Girth comparison bar chart...")
fig, ax = plt.subplots(figsize=(12, 6))

girth_data = pd.concat([
    redwood_df[['Common_Name', 'Max_Girth_m']],
    indian_df[['Common_Name', 'Max_Girth_m']]
]).sort_values('Max_Girth_m', ascending=False)

colors = ['#8B4513' if name in redwood_df['Common_Name'].values else '#2E8B57'
          for name in girth_data['Common_Name']]

bars = ax.barh(range(len(girth_data)), girth_data['Max_Girth_m'], color=colors)
ax.set_yticks(range(len(girth_data)))
ax.set_yticklabels(girth_data['Common_Name'], fontsize=9)
ax.set_xlabel('Maximum Girth (meters)', fontsize=11, fontweight='bold')
ax.set_title('Maximum Girth Comparison: Redwoods vs. Indian Trees\n' +
             '(Note: Great Banyan = canopy perimeter, others = trunk circumference)',
             fontsize=13, fontweight='bold', pad=15)
ax.grid(axis='x', alpha=0.3, linestyle='--')

# Add value labels and highlight Great Banyan
for i, (idx, row) in enumerate(girth_data.iterrows()):
    label = f"{row['Max_Girth_m']:.1f}m"
    if row['Common_Name'] == 'Great Banyan':
        label += "*"
        ax.get_children()[i].set_edgecolor('red')
        ax.get_children()[i].set_linewidth(2)
    ax.text(row['Max_Girth_m'] + 5, i, label, va='center', fontsize=8)

ax.legend(handles=legend_elements, loc='lower right', fontsize=10)
plt.tight_layout()
plt.savefig(FIGURES_DIR / 'fig02_girth_comparison.png', dpi=300, bbox_inches='tight')
plt.close()
print(f"    ✓ Saved: fig02_girth_comparison.png")

# ---------------------------------------------------------------------------
# Figure 3: Longevity/Age Comparison (Bar Chart)
# ---------------------------------------------------------------------------
print("  [3/8] Creating Figure 3: Age comparison bar chart...")
fig, ax = plt.subplots(figsize=(12, 6))

age_data = pd.concat([
    redwood_df[['Common_Name', 'Max_Age_years']],
    indian_df[['Common_Name', 'Max_Age_years']]
]).sort_values('Max_Age_years', ascending=False)

colors = ['#8B4513' if name in redwood_df['Common_Name'].values else '#2E8B57'
          for name in age_data['Common_Name']]

bars = ax.barh(range(len(age_data)), age_data['Max_Age_years'], color=colors)
ax.set_yticks(range(len(age_data)))
ax.set_yticklabels(age_data['Common_Name'], fontsize=9)
ax.set_xlabel('Maximum Age (years)', fontsize=11, fontweight='bold')
ax.set_title('Longevity Comparison: Redwoods vs. Indian Trees',
             fontsize=13, fontweight='bold', pad=15)
ax.grid(axis='x', alpha=0.3, linestyle='--')

# Add value labels
for i, (idx, row) in enumerate(age_data.iterrows()):
    ax.text(row['Max_Age_years'] + 50, i, f"{row['Max_Age_years']:.0f} yrs",
            va='center', fontsize=8)

ax.legend(handles=legend_elements, loc='lower right', fontsize=10)
plt.tight_layout()
plt.savefig(FIGURES_DIR / 'fig03_age_comparison.png', dpi=300, bbox_inches='tight')
plt.close()
print(f"    ✓ Saved: fig03_age_comparison.png")

# ---------------------------------------------------------------------------
# Figure 4: Scatter Plot - Age vs. Height (All Species)
# ---------------------------------------------------------------------------
print("  [4/8] Creating Figure 4: Age vs Height scatter plot...")
fig, ax = plt.subplots(figsize=(10, 7))

# Plot Redwoods
ax.scatter(redwood_df['Max_Age_years'], redwood_df['Max_Height_m'],
           s=200, c='#8B4513', alpha=0.7, edgecolors='black', linewidth=1.5,
           marker='s', label='Redwood (USA)')

# Plot Indian trees
ax.scatter(indian_df['Max_Age_years'], indian_df['Max_Height_m'],
           s=200, c='#2E8B57', alpha=0.7, edgecolors='black', linewidth=1.5,
           marker='o', label='Indian Tree')

# Annotate points
for idx, row in redwood_df.iterrows():
    ax.annotate(row['Common_Name'],
                (row['Max_Age_years'], row['Max_Height_m']),
                xytext=(10, 5), textcoords='offset points', fontsize=8,
                bbox=dict(boxstyle='round,pad=0.3', facecolor='wheat', alpha=0.7))

for idx, row in indian_df.iterrows():
    # Only annotate top few to avoid clutter
    if row['Max_Height_m'] > 40:
        ax.annotate(row['Common_Name'],
                    (row['Max_Age_years'], row['Max_Height_m']),
                    xytext=(10, -10), textcoords='offset points', fontsize=7,
                    bbox=dict(boxstyle='round,pad=0.3', facecolor='lightgreen', alpha=0.7))

ax.set_xlabel('Maximum Age (years)', fontsize=11, fontweight='bold')
ax.set_ylabel('Maximum Height (meters)', fontsize=11, fontweight='bold')
ax.set_title('Age vs. Height: All Tree Species', fontsize=13, fontweight='bold', pad=15)
ax.legend(fontsize=10, loc='upper left')
ax.grid(alpha=0.3, linestyle='--')

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

# ---------------------------------------------------------------------------
# Figure 5: Bubble Chart - Indian Trees Tourism Metrics
# ---------------------------------------------------------------------------
print("  [5/8] Creating Figure 5: Tourism metrics bubble chart...")
fig, ax = plt.subplots(figsize=(10, 8))

# Color mapping for Tourism Status
status_colors = {'High': '#FF6B6B', 'Medium': '#FFA500', 'Low': '#90EE90'}
colors = [status_colors[status] for status in indian_df['Current_Tourism_Status']]

# Size = Cultural Significance (scale up for visibility)
sizes = (indian_df['Cultural_Significance_1_10'] ** 2) * 10

scatter = ax.scatter(indian_df['Accessibility_1_10'],
                     indian_df['Awe_Factor_1_10'],
                     s=sizes, c=colors, alpha=0.6, edgecolors='black', linewidth=1.5)

# Annotate all points
for idx, row in indian_df.iterrows():
    ax.annotate(row['Common_Name'],
                (row['Accessibility_1_10'], row['Awe_Factor_1_10']),
                xytext=(5, 5), textcoords='offset points', fontsize=8,
                bbox=dict(boxstyle='round,pad=0.3', facecolor='white', alpha=0.7))

ax.set_xlabel('Accessibility (1-10 scale)', fontsize=11, fontweight='bold')
ax.set_ylabel('Awe Factor (1-10 scale)', fontsize=11, fontweight='bold')
ax.set_title('Indian Trees: Tourism Potential Metrics\n' +
             '(Bubble size = Cultural Significance, Color = Current Tourism Status)',
             fontsize=13, fontweight='bold', pad=15)
ax.set_xlim(3, 9)
ax.set_ylim(5, 11)
ax.grid(alpha=0.3, linestyle='--')

# Legend for tourism status
from matplotlib.patches import Patch
legend_elements = [Patch(facecolor='#FF6B6B', label='High Tourism'),
                   Patch(facecolor='#FFA500', label='Medium Tourism'),
                   Patch(facecolor='#90EE90', label='Low Tourism')]
ax.legend(handles=legend_elements, loc='lower right', fontsize=9)

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

# ---------------------------------------------------------------------------
# Figure 6: Radar/Spider Chart - Redwood Benchmark vs Top 3 Indian Candidates
# ---------------------------------------------------------------------------
print("  [6/8] Creating Figure 6: Radar chart comparison...")

# Select top 3 Indian trees by Tourism Potential Score
top3_indian = indian_df.nlargest(3, 'Tourism_Potential_Score')

# Create normalized dimensions for comparison
# For fair comparison: normalize all metrics to 0-10 scale
dimensions = ['Height', 'Girth', 'Age', 'Cultural\nSignificance', 'Awe Factor']

# Calculate Redwood benchmark (average of 2 species, normalized to 0-10)
redwood_benchmark = {
    'Height': (redwood_df['Max_Height_m'].mean() / comparative_df['Max_Height_m'].max()) * 10,
    'Girth': (redwood_df['Max_Girth_m'].mean() / 31.1) * 10,  # Use Giant Sequoia as max
    'Age': (redwood_df['Max_Age_years'].mean() / comparative_df['Max_Age_years'].max()) * 10,
    'Cultural\nSignificance': 5,  # Not applicable, use neutral midpoint
    'Awe Factor': 5  # Not applicable, use neutral midpoint
}

fig = plt.figure(figsize=(14, 10))

# Create 4 subplots (1 for benchmark, 3 for top Indian trees)
for plot_idx in range(4):
    ax = fig.add_subplot(2, 2, plot_idx+1, projection='polar')

    # Number of dimensions
    num_vars = len(dimensions)
    angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()
    angles += angles[:1]  # Complete the circle

    if plot_idx == 0:
        # Redwood benchmark
        values = list(redwood_benchmark.values())
        values += values[:1]
        ax.plot(angles, values, 'o-', linewidth=2, color='#8B4513', label='Redwood Benchmark')
        ax.fill(angles, values, alpha=0.25, color='#8B4513')
        ax.set_title('Redwood Benchmark\n(Average of 2 species)',
                     fontsize=11, fontweight='bold', pad=20)
    else:
        # Top Indian trees
        tree = top3_indian.iloc[plot_idx-1]
        values = [
            (tree['Max_Height_m'] / comparative_df['Max_Height_m'].max()) * 10,
            (tree['Max_Girth_m'] / 31.1) * 10,
            (tree['Max_Age_years'] / comparative_df['Max_Age_years'].max()) * 10,
            tree['Cultural_Significance_1_10'],
            tree['Awe_Factor_1_10']
        ]
        values += values[:1]

        color = ['#2E8B57', '#4682B4', '#9370DB'][plot_idx-1]
        ax.plot(angles, values, 'o-', linewidth=2, color=color,
                label=tree['Common_Name'])
        ax.fill(angles, values, alpha=0.25, color=color)
        ax.set_title(f"{tree['Common_Name']}\n(Tourism Score: {tree['Tourism_Potential_Score']:.1f}/10)",
                     fontsize=11, fontweight='bold', pad=20)

    # Set axis labels
    ax.set_xticks(angles[:-1])
    ax.set_xticklabels(dimensions, fontsize=9)
    ax.set_ylim(0, 10)
    ax.set_yticks([2, 4, 6, 8, 10])
    ax.set_yticklabels(['2', '4', '6', '8', '10'], fontsize=8)
    ax.grid(True, linestyle='--', alpha=0.5)

plt.suptitle('Five-Dimension Comparison: Redwood Benchmark vs. Top 3 Indian Candidates',
             fontsize=14, fontweight='bold', y=0.98)
plt.tight_layout()
plt.savefig(FIGURES_DIR / 'fig06_radar_chart_comparison.png', dpi=300, bbox_inches='tight')
plt.close()
print(f"    ✓ Saved: fig06_radar_chart_comparison.png")

# ---------------------------------------------------------------------------
# Figure 7: Heatmap - Normalized Comparative Matrix
# ---------------------------------------------------------------------------
print("  [7/8] Creating Figure 7: Normalized comparative heatmap...")
fig, ax = plt.subplots(figsize=(12, 8))

# Select normalized metrics for heatmap
heatmap_data = comparative_df[[
    'Common_Name', 'Max_Height_m_normalized', 'Max_Girth_m_normalized',
    'Max_Age_years_normalized', 'Cultural_Significance_1_10',
    'Accessibility_1_10', 'Awe_Factor_1_10'
]].copy()

# For qualitative metrics, normalize to 0-1 scale (divide by 10)
heatmap_data['Cultural_Significance_1_10'] = heatmap_data['Cultural_Significance_1_10'] / 10
heatmap_data['Accessibility_1_10'] = heatmap_data['Accessibility_1_10'] / 10
heatmap_data['Awe_Factor_1_10'] = heatmap_data['Awe_Factor_1_10'] / 10

# Set species as index
heatmap_matrix = heatmap_data.set_index('Common_Name')
heatmap_matrix.columns = ['Height', 'Girth', 'Age', 'Cultural\nSignificance',
                          'Accessibility', 'Awe Factor']

# Create heatmap
sns.heatmap(heatmap_matrix, annot=True, fmt='.2f', cmap='RdYlGn',
            cbar_kws={'label': 'Normalized Score (0-1)'},
            linewidths=0.5, linecolor='gray', ax=ax, vmin=0, vmax=1)

ax.set_title('Normalized Comparative Matrix: All Species\n' +
             '(Green = Strength, Red = Weakness)',
             fontsize=13, fontweight='bold', pad=15)
ax.set_xlabel('Metrics', fontsize=11, fontweight='bold')
ax.set_ylabel('Species', fontsize=11, fontweight='bold')

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

# ---------------------------------------------------------------------------
# Figure 8: Tourism Status Distribution (Bar Chart)
# ---------------------------------------------------------------------------
print("  [8/8] Creating Figure 8: Tourism status bar chart...")
fig, ax = plt.subplots(figsize=(10, 6))

# Count tourism status
status_counts = indian_df['Current_Tourism_Status'].value_counts()
colors_status = ['#FF6B6B', '#FFA500', '#90EE90']

bars = ax.bar(status_counts.index, status_counts.values,
              color=[status_colors[s] for s in status_counts.index],
              edgecolor='black', linewidth=1.5, alpha=0.8)

ax.set_xlabel('Tourism Status', fontsize=11, fontweight='bold')
ax.set_ylabel('Number of Tree Species', fontsize=11, fontweight='bold')
ax.set_title('Current Tourism Status Distribution: Indian Trees',
             fontsize=13, fontweight='bold', pad=15)
ax.set_ylim(0, max(status_counts.values) + 1)

# Add value labels on bars
for bar in bars:
    height = bar.get_height()
    ax.text(bar.get_x() + bar.get_width()/2., height + 0.1,
            f'{int(height)}', ha='center', va='bottom', fontsize=11, fontweight='bold')

ax.grid(axis='y', alpha=0.3, linestyle='--')

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

print("\n  ✓ All 8 visualizations generated successfully!")

# =============================================================================
# 5. SAVE NORMALIZED COMPARATIVE DATA
# =============================================================================
print("\n[5/5] Saving results...")

# Save full comparative matrix with normalized scores
comparative_df.to_csv(RESULTS_DIR / 'comparative_matrix_normalized.csv', index=False)
print(f"  ✓ Saved: comparative_matrix_normalized.csv ({comparative_df.shape})")

print("\n" + "=" * 80)
print("STEP 2 COMPLETE")
print("=" * 80)
print(f"\nGenerated outputs:")
print(f"  - 8 visualizations in {FIGURES_DIR}/")
print(f"  - Normalized data in {RESULTS_DIR}/comparative_matrix_normalized.csv")
print(f"  - Statistical findings in {RESULTS_DIR}/eda_findings.txt")
print("\nReady for next step!")
