#!/usr/bin/env python3
"""
Quick script to check notebook assets status without full Flask app initialization.
"""
import os
import sys
import json
from datetime import datetime

# Add the app directory to path
sys.path.insert(0, '/home/ashraffarid2010/jadwaai.com')

# Set environment variables
os.environ['DATABASE_URL'] = 'postgresql://postgres@127.0.0.1:5432/jadwa'
os.environ['SECRET_KEY'] = 'dev-secret'

try:
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy

    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL')
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    db = SQLAlchemy(app)

    # Define the model
    class NotebookAsset(db.Model):
        __tablename__ = 'notebook_assets'
        id = db.Column(db.Integer, primary_key=True)
        report_id = db.Column(db.Integer, db.ForeignKey('reports.id'), nullable=False)
        asset_type = db.Column(db.String(30), nullable=False)
        status = db.Column(db.String(20), default='pending')
        file_path = db.Column(db.String(500), nullable=True)
        file_format = db.Column(db.String(10), nullable=True)
        error_message = db.Column(db.Text, nullable=True)
        created_at = db.Column(db.DateTime, default=datetime.utcnow)
        completed_at = db.Column(db.DateTime, nullable=True)

    with app.app_context():
        print("=" * 80)
        print("NOTEBOOK ASSETS FOR REPORT 35")
        print("=" * 80)

        assets = NotebookAsset.query.filter_by(report_id=35).all()

        if not assets:
            print("No assets found in database for report 35")
        else:
            print(f"\nFound {len(assets)} assets in database:\n")

            for asset in assets:
                print(f"Asset ID: {asset.id}")
                print(f"  Type: {asset.asset_type}")
                print(f"  Status: {asset.status}")
                print(f"  File Path: {asset.file_path}")
                print(f"  File Format: {asset.file_format}")
                print(f"  Error: {asset.error_message}")
                print(f"  Created: {asset.created_at}")
                print(f"  Completed: {asset.completed_at}")
                print("  " + "-" * 60)

        print("\n" + "=" * 80)
        print("FILES ON DISK FOR REPORT 35")
        print("=" * 80)

        upload_dir = '/home/ashraffarid2010/jadwaai.com/app/static/uploads/notebooks/35'

        if os.path.exists(upload_dir):
            files = os.listdir(upload_dir)
            print(f"\nFound {len(files)} files in {upload_dir}:\n")

            for filename in sorted(files):
                filepath = os.path.join(upload_dir, filename)
                size = os.path.getsize(filepath)
                size_mb = size / (1024 * 1024)
                mtime = datetime.fromtimestamp(os.path.getmtime(filepath))
                print(f"  {filename}")
                print(f"    Size: {size_mb:.2f} MB")
                print(f"    Modified: {mtime}")
                print()
        else:
            print(f"Upload directory does not exist: {upload_dir}")

        print("\n" + "=" * 80)
        print("MISMATCH ANALYSIS")
        print("=" * 80)

        # Check for files without database records
        if os.path.exists(upload_dir):
            files_on_disk = set(os.listdir(upload_dir))
            db_files = set()

            for asset in assets:
                if asset.file_path:
                    # Extract filename from path
                    filename = os.path.basename(asset.file_path)
                    db_files.add(filename)

            files_without_db = files_on_disk - db_files

            if files_without_db:
                print(f"\n⚠️  Files on disk WITHOUT database records:")
                for f in files_without_db:
                    print(f"  - {f}")
            else:
                print("\n✓ All files on disk have database records")

            # Check for database records without files
            db_records_without_files = []
            for asset in assets:
                if asset.file_path:
                    full_path = f"/home/ashraffarid2010/jadwaai.com/app/static/{asset.file_path}"
                    if not os.path.exists(full_path):
                        db_records_without_files.append(asset)

            if db_records_without_files:
                print(f"\n⚠️  Database records WITHOUT files on disk:")
                for asset in db_records_without_files:
                    print(f"  - Type: {asset.asset_type}, Path: {asset.file_path}")
            else:
                print("\n✓ All database records have files on disk")

        print("\n" + "=" * 80)

except Exception as e:
    print(f"Error: {e}")
    import traceback
    traceback.print_exc()