from app.utils.otp_generator import generate_otp
from app.models.otp_model import OTPVerification
from app.services.email_service import EmailDeliveryError, send_email

def create_and_send_otp(db, user_id, email, purpose):

    otp = generate_otp()

    otp_obj = OTPVerification(
        user_id=user_id,
        otp_code=otp,
        purpose=purpose
    )

    db.add(otp_obj)

    db.commit()

    try:
        send_email(email, otp, purpose)
    except EmailDeliveryError:
        db.delete(otp_obj)
        db.commit()
        raise

    return otp