import pandas as pd
import numpy as np
import tensorflow as tf
import os.path

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.layers.experimental import preprocessing

pd.set_option("display.max_columns", None)

# Wczytanie danych
train_data = pd.read_csv("./train.csv")
test_data = pd.read_csv("./test.csv")

# Stworzenie modelu 
columns_to_use = ['Year', 'Runtime', 'Netflix']
train_X = tf.convert_to_tensor(train_data[columns_to_use])
train_Y = tf.convert_to_tensor(train_data[["IMDb"]])
test_X = tf.convert_to_tensor(test_data[columns_to_use])
test_Y = tf.convert_to_tensor(test_data[["IMDb"]])

normalizer = preprocessing.Normalization(input_shape=[3,])
normalizer.adapt(train_X)

if os.path.isfile('linear_regression.h5'):
    model = keras.models.load_model('linear_regression')
else:
    model = keras.Sequential([
        keras.Input(shape=(len(columns_to_use),)),
        normalizer,
        layers.Dense(30, activation='relu'),
        layers.Dense(10, activation='relu'),
        layers.Dense(25, activation='relu'),
        layers.Dense(1)
    ])

    model.compile(loss='mean_absolute_error',
                    optimizer=tf.keras.optimizers.Adam(0.001))

    model.fit(train_X, train_Y, verbose=0, epochs=100)

    model.save('linear_regression')

# Predykcja na danych testowych
results = model.predict(test_X)

# Zapis danych do pliku
with open("results.txt", 'w') as file:
    for result in results:
        file.writelines(str(result[0]) + "\n")