import pandas as pd
import joblib
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix

# --- load data ---
df = pd.read_csv("gesture_data.csv")
X = df.drop(columns=["label"]).values
y = df["label"].values
print(f"Loaded {len(df)} samples, {X.shape[1]} features, classes: {sorted(set(y))}")

# --- split: 80% train, 20% held-out test ---
Xtr, Xte, ytr, yte = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42)

# --- train ---
model = RandomForestClassifier(n_estimators=200, random_state=42)
model.fit(Xtr, ytr)

# --- evaluate on the held-out test set ---
pred = model.predict(Xte)
print("\n=== Classification report (test set) ===")
print(classification_report(yte, pred))

print("=== Confusion matrix (rows=true, cols=predicted) ===")
labels = sorted(set(y))
cm = confusion_matrix(yte, pred, labels=labels)
print("labels:", labels)
print(cm)

# --- save the model ---
joblib.dump(model, "gesture_model.joblib")
print("\nModel saved to gesture_model.joblib")