from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import pandas as pd
import joblib
import logging

logging.basicConfig(level=logging.INFO)

try:
    model = joblib.load("RandomForest_pipeline.joblib")
except Exception as e:
    raise RuntimeError(f"Failed to load model: {e}")

app = FastAPI(
    title="SuperKart Sales Forecast API",
    description="Predict total product-store revenue using Random Forest regression.",
    version="1.0.0"
)

class SalesInput(BaseModel):
    Product_Id: str
    Product_Weight: float
    Product_Sugar_Content: str
    Product_Allocated_Area: float
    Product_Type: str
    Product_MRP: float
    Store_Id: str
    Store_Establishment_Year: int
    Store_Size: str
    Store_Location_City_Type: str
    Store_Type: str

@app.get("/")
def read_root():
    return {"message": "✅ SuperKart Sales Forecast API is running."}

@app.post("/predict")
def predict_sales(input_data: SalesInput):
    try:
        input_df = pd.DataFrame([input_data.dict()])
        prediction = model.predict(input_df)[0]
        logging.info(f"Input: {input_data.dict()}")
        logging.info(f"Prediction: {prediction}")
        return {
            "prediction": float(prediction),
            "message": "✅ Prediction successful"
        }
    except Exception as e:
        logging.error(f"Prediction failed: {str(e)}")
        raise HTTPException(status_code=500, detail=f"Prediction failed: {str(e)}")