from fastapi import FastAPI
from pydantic import EmailStr
import smtplib, ssl
from email.message import EmailMessage
from dotenv import load_dotenv
import certifi
import os

load_dotenv()

app = FastAPI()

# Load env vars
SMTP_SERVER = os.getenv("SMTP_SERVER")
SMTP_PORT = int(os.getenv("SMTP_PORT"))
SMTP_USERNAME = os.getenv("SMTP_USERNAME")
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD")
EMAIL_SENDER = os.getenv("EMAIL_SENDER")

def send_email(to_email: EmailStr, subject: str, body: str):
    msg = EmailMessage()
    msg["Subject"] = subject
    msg["From"] = EMAIL_SENDER
    msg["To"] = to_email
    msg.set_content(body)

    msg.add_alternative(body, subtype="html")

    context = ssl.create_default_context(cafile=certifi.where())  # use certifi CA bundle
    with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT, context=context) as server:
        server.login(SMTP_USERNAME, SMTP_PASSWORD)
        server.send_message(msg)

def send_signup_otp_email(
        to_email: EmailStr,
        name: str,
        otp: str
):
    subject = "Signup OTP PhoneMate"
    html_body = f"""
    <html> 
    <body>
        <h2>Welcome to Phone Mate</h2>
        <p>Hello {name},</p>
        <p>Your account has been created. Please enter the below otp to continue:</p>
        <p><strong>Otp:</strong> {otp}<br>
    </body>
    </html>
    """
    send_email(to_email, subject, html_body)
    return True

def send_forgot_password_otp_email(
        to_email: EmailStr,

        otp: str
):
    subject = "Recover Password PhoneMate"
    html_body = f"""
    <html> 
    <body>
        <h2>Recover your password on PhoneMate</h2>
        <p>Hi,</p>
        <p>Please use the below otp to recover your password on phonemate:</p>
        <p><strong>Otp:</strong> {otp}<br>
    </body>
    </html>
    """
    send_email(to_email, subject, html_body)
    return True
