import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM,Dense,Dropout

df = pd.read_csv('crypto_prices.csv', parse_dates=['Date'], index_col='Date')[['Bitcoin', 'Ethereum']].dropna()
scaler = MinMaxScaler()
scaled = scaler.fit_transform(df)

def create_sequences(data, seq_len):
    X, y = [], []
    for i in range(seq_len, len(data)):
        X.append(data[i-seq_len:i])
        y.append(data[i])
    return np.array(X), np.array(y)

SEQ_LEN = 60
X, y = create_sequences(scaled, SEQ_LEN)
split = int(len(X) * 0.8)
X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[split:]

model = Sequential([
    LSTM(16, return_sequences=True, input_shape=(SEQ_LEN, 2)),
    Dropout(0.2),
    LSTM(16),
    Dropout(0.2),
    Dense(2)
])
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, y_train, epochs=20, batch_size=32, verbose=0)

pred = model.predict(X_test)
predicted = scaler.inverse_transform(pred)
actual = scaler.inverse_transform(y_test)

plt.figure(figsize=(12,6))
plt.plot(actual[:, 0], label='Actual Bitcoin')
plt.plot(predicted[:, 0], label='Predicted Bitcoin')
plt.plot(actual[:, 1], label='Actual Ethereum')
plt.plot(predicted[:, 1], label='Predicted Ethereum')
plt.legend()
plt.title("Bitcoin & Ethereum Price Prediction (LSTM)")
plt.xlabel("Time")
plt.ylabel("Price")
plt.tight_layout()
plt.show()