#!/usr/bin/env python3
"""
Library Management System

Main program that uses generated SQLite schema to create a database,
insert sample data, and demonstrate active loans reporting.
"""

import sys
import os
from pathlib import Path

# Import generated schema module
from generated.library_schema import (
    init_database,
    insert_sample_data,
    print_active_loans_report,
    print_loan_history_report,
    get_active_loans,
)
from generator.helpers import get_sample_data


def main():
    """Main program."""

    db_path = "library.db"

    print("\n" + "=" * 70)
    print("LIBRARY MANAGEMENT SYSTEM".center(70))
    print("=" * 70 + "\n")

    # Step 1: Initialize database
    print("Step 1: Initializing database...")
    try:
        conn = init_database(db_path)
        print(f"  ✓ Database created: {db_path}")
    except Exception as e:
        print(f"  ✗ Error creating database: {e}")
        return 1

    # Step 2: Get sample data
    print("\nStep 2: Preparing sample data...")
    sample_data = get_sample_data()
    print(f"  ✓ Loaded {len(sample_data['authors'])} authors")
    print(f"  ✓ Loaded {len(sample_data['books'])} books")
    print(f"  ✓ Loaded {len(sample_data['borrowers'])} borrowers")
    print(f"  ✓ Loaded {len(sample_data['loans'])} loans")

    # Step 3: Insert sample data
    print("\nStep 3: Inserting sample data...")
    try:
        insert_sample_data(conn, sample_data)
        print("  ✓ Sample data inserted successfully")
    except Exception as e:
        print(f"  ✗ Error inserting data: {e}")
        return 1

    # Step 4: Display reports
    print("\nStep 4: Generating reports...")

    # Show active loans
    print_active_loans_report(conn)

    # Show complete loan history
    print_loan_history_report(conn)

    # Step 5: Summary
    print("Step 5: Summary")
    active_loans = get_active_loans(conn)
    print(f"  ✓ Database contains {len(sample_data['authors'])} authors")
    print(f"  ✓ Database contains {len(sample_data['books'])} books")
    print(f"  ✓ Database contains {len(sample_data['borrowers'])} borrowers")
    print(f"  ✓ Database contains {len(sample_data['loans'])} total loans")
    print(f"  ✓ {len(active_loans)} loan(s) currently active")

    # Clean up
    conn.close()
    print(f"\n✓ Program completed successfully!")
    print(f"Database file: {db_path}\n")

    return 0


if __name__ == "__main__":
    sys.exit(main())
