import re
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.validators import DataRequired, Email, Length, Regexp
import smtplib
from email.message import EmailMessage
import requests
from jproperties import Properties
import os

root_path = os.path.dirname(__file__)


configs = Properties()
with open(root_path + '/app-config.properties', 'rb') as config_file:
    configs.load(config_file)


class ContactForm(FlaskForm):
    name = StringField('Nome', validators=[DataRequired(), Length(max=50, message="Name must be shorter than 50 characters")])
    email = StringField('Email', validators=[DataRequired(), Email(), Length(max=50, message="Email must be shorter than 50 characters")])
    phone = StringField('Telefono', validators=[DataRequired(), Length(max=20), Regexp('^\\+?\\d+$', message="Phone number must contain only numbers and optional leading '+'")])
    subject = StringField('Oggetto', validators=[DataRequired(), Length(max=20, message= "Subject must be shorter than 20 characters")])
    message = TextAreaField('Messaggio', validators=[DataRequired(), Length(max=5000, message= "Message must be shorter than 100 characters") ])
    submit = SubmitField('Invia')

def send_email(name, email, phone, subject, message):

    email_message = f"""\
From: {email}
To: {', '.join(configs.get("SMTP_RECEIVERS").data.split(","))}
Subject: {configs.get("SMTP_SUBJECT_RECEIVER").data}
Oggetto: {subject}

Nome: {name}
Email: {email}
Telefono: {phone}

Messaggio:
{message}
    """.encode('utf-8')

    smtp_server = configs.get("SMTP_SERVER").data
    smtp_port = configs.get("SMTP_PORT").data
    smtp_username = configs.get("SMTP_MAIL").data
    smtp_password = configs.get("SMTP_PWD").data
    smtp_receivers_array = configs.get("SMTP_RECEIVERS").data.split(",")

    confirmation_message = f"""\
From: {smtp_username}
To: {email}
Subject: {configs.get("SMTP_SUBJECT_USER").data}

Grazie per averci contattato. Abbiamo ricevuto il tuo messaggio e ti risponderemo al più presto.
Cordiali saluti,
Il team di SOCrates
    """.encode('utf-8')

    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()
        server.login(smtp_username, smtp_password)

        server.sendmail(email, smtp_receivers_array, email_message)
        server.sendmail(smtp_username, email, confirmation_message)

def get_browser_language(language, lang_list):
    lang = str(language).split(',')
    lang = lang[0].split('-')
    lang = lang[0]

    if lang not in lang_list:
        lang = configs.get("LANG").data
    return lang

def get_price_strings(udemy_id):
    url = f"https://www.udemy.com/api-2.0/course-landing-components/{udemy_id}/me/?components=purchase"
    price_string = ""
    full_price_string = ""
    #print(udemy_id)

    try:
        response = requests.get(url)
        response.raise_for_status()
        udemy_data = response.json()
        purchase_data = udemy_data.get("purchase", {}).get("data", {})
        pricing_result = purchase_data.get("pricing_result", {})
        price = pricing_result.get("price", {})
        full_price = pricing_result.get("list_price", {})

        full_price_string = full_price.get("price_string")
        price_string = price.get("price_string")

    except requests.exceptions.RequestException as e:
        pass
    
    if full_price_string == price_string:
        full_price_string = ""

    return price_string, full_price_string