"""
X-Ray Detector Calibration using ML - Submission Script
=======================================================
Generates a submission ZIP for Codabench.

Usage:
    python submission_script.py

Output:
    - ../submissions/solution_YYYY_MM_DD_HH_MM_SS.zip (code submission)
"""

import os
import sys
import zipfile
import shutil
import pandas as pd
from pathlib import Path

# Enable finding modules in parent directory
sys.path.append(str(Path(__file__).resolve().parent.parent))

PROGRAM_FILE = "model.py"

if __name__ == "__main__":
    print("=" * 60)
    print("X-Ray Detector - Generating Submission from Organized Structure")
    print("=" * 60)
    
    # Root directory (parent of packager/)
    root_dir = Path(__file__).resolve().parent.parent
    submissions_dir = root_dir / "submissions"
    submissions_dir.mkdir(exist_ok=True)
    
    # ==========================================================================
    # CREATE SUBMISSION ZIP
    # ==========================================================================
    
    timestamp = pd.Timestamp.now().strftime("%Y_%m_%d_%H_%M_%S")
    
    # --- Code Submission ---
    print("\n" + "=" * 60)
    print("Creating Code Submission")
    print("=" * 60)
    
    src_program_path = root_dir / PROGRAM_FILE
    
    if not src_program_path.exists():
        print(f"ERROR: Source program file {src_program_path} not found!")
        sys.exit(1)
        
    zip_program = submissions_dir / f"submission_{timestamp}.zip"
    
    with zipfile.ZipFile(zip_program, 'w') as zipf:
        # Add the main model file at the root of the zip archive
        zipf.write(src_program_path, arcname=PROGRAM_FILE)
        
        # Add any extra source files if they exist
        src_dir = root_dir / "src"
        if src_dir.exists():
            for root, _, files in os.walk(src_dir):
                for file in files:
                    if file.endswith('.py') and file != "__init__.py":
                        file_path = Path(root) / file
                        arcname = file_path.relative_to(root_dir)
                        zipf.write(file_path, arcname=str(arcname))
    
    print(f"Code submission: {zip_program}")
    
    # ==========================================================================
    # SUMMARY
    # ==========================================================================
    
    print("\n" + "=" * 60)
    print("SUBMISSION COMPLETE")
    print("=" * 60)
    print(f"\nFiles created:")
    print(f"  - {zip_program}")
