import numpy as np, pandas as pd, matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import SimpleRNN, Dense

# 1️⃣ Load data
df = pd.read_csv("bitcoin.csv", parse_dates=["Date"], index_col="Date")
data = df[["Close"]].values

# 2️⃣ Normalize + prepare dataset
scaler = MinMaxScaler()
scaled = scaler.fit_transform(data)

def make_dataset(seq, step=60):
    X, y = [], []
    for i in range(step, len(seq)):
        X.append(seq[i-step:i, 0]); y.append(seq[i, 0])
    return np.array(X), np.array(y)

X, y = make_dataset(scaled)
X = X.reshape((X.shape[0], X.shape[1], 1))

# 3️⃣ Build RNN
model = Sequential([
    SimpleRNN(50, input_shape=(X.shape[1], 1)),
    Dense(1)
])
model.compile(optimizer="adam", loss="mse")
model.fit(X, y, epochs=20, batch_size=32, verbose=1)

# 4️⃣ Predict
pred = scaler.inverse_transform(model.predict(X))
actual = scaler.inverse_transform(y.reshape(-1,1))

# 5️⃣ Plot
plt.plot(actual, label="Actual")
plt.plot(pred, label="Predicted")
plt.title("Bitcoin Price Prediction (RNN)")
plt.legend(); plt.show()

# 6️⃣ Evaluate
rmse = np.sqrt(mean_squared_error(actual, pred))
print("RMSE:", rmse)
