"""
Train YOLOv8 classification model on the generated dataset.
Classes: hammer (1), wrench (2), pliers (3) per competition spec.
"""

from ultralytics import YOLO
import os
import shutil

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATASET_DIR = os.path.join(BASE_DIR, "dataset")

model = YOLO("yolov8n-cls.pt")  # nano classification model

results = model.train(
    data=DATASET_DIR,
    epochs=80,
    imgsz=224,
    batch=32,
    patience=15,
    project=os.path.join(BASE_DIR, "runs"),
    name="module_v_cls",
    exist_ok=True,
    verbose=True,
)

# Validate
metrics = model.val()
print(f"\nValidation accuracy top-1: {metrics.top1:.4f}")
print(f"Validation accuracy top-5: {metrics.top5:.4f}")

# Export to ONNX
best_path = os.path.join(BASE_DIR, "runs", "module_v_cls", "weights", "best.pt")
export_model = YOLO(best_path)
export_model.export(format="onnx", imgsz=224)
print(f"\nModel exported to ONNX")

# Copy best.pt to project root
shutil.copy(best_path, os.path.join(BASE_DIR, "best.pt"))
print(f"Best model copied to {os.path.join(BASE_DIR, 'best.pt')}")
