"""
Generate Complete L2 Schema Documentation
"""
import sqlite3

conn = sqlite3.connect('database/L2/L2.db')
cursor = conn.cursor()

# Get all table names
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name")
tables = [row[0] for row in cursor.fetchall()]

print('='*80)
print('L2 DATABASE COMPLETE SCHEMA')
print('='*80)
print()

for table in tables:
    if table == 'sqlite_sequence':
        continue
    
    # Get table creation SQL
    cursor.execute(f"SELECT sql FROM sqlite_master WHERE type='table' AND name='{table}'")
    create_sql = cursor.fetchone()[0]
    
    # Get row count
    cursor.execute(f'SELECT COUNT(*) FROM {table}')
    count = cursor.fetchone()[0]
    
    # Get column count
    cursor.execute(f'PRAGMA table_info({table})')
    cols = cursor.fetchall()
    
    print(f'TABLE: {table}')
    print(f'Rows: {count:,} | Columns: {len(cols)}')
    print('-'*80)
    print(create_sql + ';')
    print()
    
    # Show column details
    print('COLUMNS:')
    for col in cols:
        col_id, col_name, col_type, not_null, default_val, pk = col
        pk_marker = ' [PK]' if pk else ''
        notnull_marker = ' NOT NULL' if not_null else ''
        default_marker = f' DEFAULT {default_val}' if default_val else ''
        print(f'  {col_name:30s} {col_type:15s}{pk_marker}{notnull_marker}{default_marker}')
    print()
    print()

conn.close()
