import smtplib
import pandas as pd
import requests
from bs4 import BeautifulSoup
from price_parser import Price

PRODUCT_URL_CSV = "products.csv"
SAVE_TO_CSV = True
PRICES_CSV = "prices.csv"
SEND_MAIL = True

def Get_URLs(csv_file):
    df = pd.read_csv(csv_file)
    return df


def Process_Products(df):
    for product in df.to_dict("records"): # product["url"] is the URL
        pass


def Get_Response(url):
    response = requests.get(url)
    return response.text


def Get_Price(html):
    soup = BeautifulSoup(html, "lmxl")
    el = soup.select_one(".price_color")
    price = price.fromstring(el.text)
    return price.amount_float

# Overload the function
def Process_Products(df):
    updated_products = []
    for product in df.to_dict("records"):
        html = Get_Response(product["url"])
        product["price"] = Get_Price(html)
        product["alert"] = product["price"] < product["alert_price"]
        updated_products.append((product))
    return pd.DataFrame(updated_products)


def Get_Mail(df):
    subject = "Price Drop Alert"
    body = df[df["alert"]].to_string()
    subject_and_message = f'Subject:{subject}\n\n{body}'
    return subject_and_message


def Send_Mail(df):
    message_text = get_mail(df)
    with smtplib.SMTP("smtp.server.address", 587) as smtp:
        smtp.starttls()
        smtp.login(mail_user, mail_to, message_text)


def main():
    df = Get_URLs(PRODUCT_URL_CSV)
    df_updated = Process_Products(df)
    if SAVE_TO_CSV:
        df_updated.to_csv(PRICES_CSV, index=False, mode = "a")
    if SEND_MAIL:
        Send_Mail(df_updated)
