import pandas as pd
import tensorflow as tf
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import numpy as np

# Load dataset
df = pd.read_csv('house_prices.csv')  # Your CSV file path

# Features and target
X = df[['size_sqft', 'bedrooms', 'bathrooms', 'age_years']].values
y = df['price'].values

# Train/test split
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Scale features
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Build model
model = tf.keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
    layers.Dense(64, activation='relu'),
    layers.Dense(1)  # regression output
])

model.compile(optimizer='adam', loss='mse', metrics=['mae'])

# Train model
model.fit(X_train, y_train, epochs=50, validation_split=0.2)

# Evaluate
loss, mae = model.evaluate(X_test, y_test)
print(f"Test MAE: {mae:,.2f}")

# User input prediction loop
def predict_price():
    print("\nEnter house details to predict price:")
    try:
        size_sqft = float(input("Size (sqft): "))
        bedrooms = int(input("Number of bedrooms: "))
        bathrooms = int(input("Number of bathrooms: "))
        age_years = int(input("Age of house (years): "))
    except ValueError:
        print("Invalid input. Please enter numeric values.")
        return

    user_data = np.array([[size_sqft, bedrooms, bathrooms, age_years]])
    user_data_scaled = scaler.transform(user_data)
    prediction = model.predict(user_data_scaled, verbose=0)
    print(f"Predicted house price: ${prediction[0][0]:,.2f}")

# Run prediction interactively
while True:
    predict_price()
    cont = input("Predict another? (y/n): ").strip().lower()
    if cont != 'y':
        break

print("Goodbye!")
