import random

# ==========================================
# 1. GENERATE SYNTHETIC DATA
# ==========================================
random.seed(42)
regions = ['North', 'South', 'East', 'West']
data = []

# Generate 200 records
for _ in range(200):
    region = random.choice(regions)
    age = int(random.normalvariate(35, 10))
    ad_spend = random.uniform(1000, 5000)
    # Calculate revenue with some added noise
    revenue = (ad_spend * 2.5) + (age * 15) + random.normalvariate(0, 1500)
    
    data.append({'Region': region, 'Age': age, 'Revenue': revenue})

# ==========================================
# 2. ASCII VISUALIZATIONS
# ==========================================
MAX_BAR_LENGTH = 40

print("--- ASCII BAR CHART: AVERAGE REVENUE BY REGION ---\n")
# Calculate averages
region_rev = {r: [] for r in regions}
for row in data:
    region_rev[row['Region']].append(row['Revenue'])

avg_rev = {r: sum(revs)/len(revs) for r, revs in region_rev.items()}
max_rev = max(avg_rev.values())

# Draw Bar Chart
for region, rev in avg_rev.items():
    bar_length = int((rev / max_rev) * MAX_BAR_LENGTH)
    bar = '█' * bar_length
    print("{:<5} | {} (${:,.2f})".format(region, bar, rev))

print("\n\n--- ASCII HISTOGRAM: CUSTOMER AGE DISTRIBUTION ---\n")
# Group ages into 10-year bins
bins = {'10-19': 0, '20-29': 0, '30-39': 0, '40-49': 0, '50-59': 0, '60+': 0}

for row in data:
    age = row['Age']
    if 10 <= age < 20: bins['10-19'] += 1
    elif 20 <= age < 30: bins['20-29'] += 1
    elif 30 <= age < 40: bins['30-39'] += 1
    elif 40 <= age < 50: bins['40-49'] += 1
    elif 50 <= age < 60: bins['50-59'] += 1
    elif age >= 60: bins['60+'] += 1

max_count = max(bins.values())

# Draw Histogram
for label, count in bins.items():
    if max_count > 0:
        bar_length = int((count / float(max_count)) * MAX_BAR_LENGTH)
    else:
        bar_length = 0
    bar = '█' * bar_length
    print("{:<5} | {} ({})".format(label, bar, count))