"""Clear all jobs, notifications, and invoices from the database"""
from app import create_app
from app.models.notification import Notification
from app.models.job import Job, Application
from app.models.contract import Contract, Payment, Invoice
from app.models.rating import Rating
from app.models.time_tracking import TimeEntry
from app.extensions import db

app = create_app()

with app.app_context():
    # Count before deletion
    notification_count = Notification.query.count()
    invoice_count = Invoice.query.count()
    payment_count = Payment.query.count()
    rating_count = Rating.query.count()
    time_entry_count = TimeEntry.query.count()
    contract_count = Contract.query.count()
    application_count = Application.query.count()
    job_count = Job.query.count()
    
    print(f"\n=== Before Deletion ===")
    print(f"Notifications: {notification_count}")
    print(f"Invoices: {invoice_count}")
    print(f"Payments: {payment_count}")
    print(f"Ratings: {rating_count}")
    print(f"Time Entries: {time_entry_count}")
    print(f"Contracts: {contract_count}")
    print(f"Applications: {application_count}")
    print(f"Jobs: {job_count}")
    
    # Delete in order of dependencies (most dependent first)
    print(f"\n⏳ Deleting all records...")
    
    # Delete notifications (no dependencies)
    Notification.query.delete()
    print(f"✅ Deleted {notification_count} notifications")
    
    # Delete invoices (depend on payments) - MUST BE BEFORE PAYMENTS
    Invoice.query.delete()
    print(f"✅ Deleted {invoice_count} invoices")
    
    # Delete payments (depend on contracts) - MUST BE BEFORE CONTRACTS
    Payment.query.delete()
    print(f"✅ Deleted {payment_count} payments")
    
    # Delete ratings (depend on contracts)
    Rating.query.delete()
    print(f"✅ Deleted {rating_count} ratings")
    
    # Delete time entries (depend on contracts)
    TimeEntry.query.delete()
    print(f"✅ Deleted {time_entry_count} time entries")
    
    # Delete contracts (depend on jobs and applications)
    Contract.query.delete()
    print(f"✅ Deleted {contract_count} contracts")
    
    # Delete applications (depend on jobs)
    Application.query.delete()
    print(f"✅ Deleted {application_count} applications")
    
    # Finally delete jobs
    Job.query.delete()
    print(f"✅ Deleted {job_count} jobs")
    
    # Commit all changes
    db.session.commit()
    
    # Verify deletion
    remaining_notifications = Notification.query.count()
    remaining_invoices = Invoice.query.count()
    remaining_payments = Payment.query.count()
    remaining_ratings = Rating.query.count()
    remaining_time_entries = TimeEntry.query.count()
    remaining_contracts = Contract.query.count()
    remaining_applications = Application.query.count()
    remaining_jobs = Job.query.count()
    
    print(f"\n=== After Deletion ===")
    print(f"Notifications: {remaining_notifications}")
    print(f"Invoices: {remaining_invoices}")
    print(f"Payments: {remaining_payments}")
    print(f"Ratings: {remaining_ratings}")
    print(f"Time Entries: {remaining_time_entries}")
    print(f"Contracts: {remaining_contracts}")
    print(f"Applications: {remaining_applications}")
    print(f"Jobs: {remaining_jobs}")
    
    if all([remaining_notifications == 0, remaining_invoices == 0, remaining_payments == 0, 
            remaining_ratings == 0, remaining_time_entries == 0, remaining_contracts == 0, 
            remaining_applications == 0, remaining_jobs == 0]):
        print("\n✅ All jobs, notifications, and invoices successfully cleared!")
    else:
        print("\n⚠️ Warning: Some records may still remain")
