#!/bin/sh

mail_passport=${1:-mail_passport.json}


export MAIL_PASSPORT="${mail_passport}"


command='

import os
import sys
import json
import smtplib
import mimetypes
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

from mail_utils import init_smtp_session

def send_message_from_json(json_path):
    """
    Читает конфигурацию из JSON-файла, формирует письмо с вложениями
    и отправляет его через SMTP.
    """
    # 1. Читаем и парсим JSON-файл
    if not os.path.exists(json_path):
        print(f"Ошибка: JSON-файл не найден: {json_path}", file=sys.stderr)
        return False
        
    with open(json_path, "r", encoding="utf-8") as f:
        config = json.load(f)
        
    mail_from = config.get("from")
    mail_to = config.get("to")
    mail_subject = config.get("subject", "")
    mail_body = config.get("body", "Текст письма")

    files = config.get("files", [])
    report_send = config.get("report_send", "0")
    report_read = config.get("report_read", "0")
    
    # 2. Создаем базовый MIME-контейнер для письма с вложениями
    msg = MIMEMultipart()
    msg["From"] = mail_from
    msg["To"] = mail_to
    msg["Subject"] = mail_subject
    
    # Запрос квитанции о прочтении (MDN) на уровне заголовков
    if str(report_read) == "1":
        msg["Disposition-Notification-To"] = mail_from
        msg["Return-Receipt-To"] = mail_from
    
    # Добавляем пустое или дефолтное текстовое тело (необходимо по стандарту)
    msg.attach(MIMEText(mail_body, "plain", "utf-8"))
    
    # 3. Прикрепляем файлы из списка
    for file_path in files:
        if not os.path.exists(file_path):
            print(f"Предупреждение: Файл для вложения не найден: {file_path}", file=sys.stderr)
            return False
            
        filename = os.path.basename(file_path)
        
        # Определяем тип файла автоматически
        ctype, encoding = mimetypes.guess_type(file_path)
        if ctype is None or encoding:
            ctype = "application/octet-stream"
        maintype, subtype = ctype.split("/", 1)
        
        # Читаем файл в бинарном режиме
        with open(file_path, "rb") as fp:
            attachment = MIMEBase(maintype, subtype)
            attachment.set_payload(fp.read())
            
        # Кодируем в Base64 и добавляем заголовки вложения
        encoders.encode_base64(attachment)
        attachment.add_header("Content-Disposition", "attachment", filename=filename)
        msg.attach(attachment)
        
    
    # Опции отправки (Запрос отчета о доставке DSN на уровне SMTP)
    smtp_options = []
    if str(report_send) == "1":
        smtp_options = ["RET=HDRS", "NOTIFY=SUCCESS,FAILURE"]
        
    try:
	
        smtp = init_smtp_session("config.ini")

        envelope_from = f"<{mail_from}>" if not mail_from.startswith("<") else mail_from
        envelope_to = f"<{mail_to}>" if not mail_to.startswith("<") else mail_to

        # Отправляем с учетом флагов DSN
        #smtp.sendmail(user, [mail_to], msg.as_string(), mail_options=smtp_options)
        #smtp.sendmail(envelope_from, [envelope_to], msg.as_string(), mail_options=smtp_options)
        smtp.sendmail(envelope_from, [envelope_to], msg.as_string())
        smtp.quit()
        
        print(f"Письмо на адрес {mail_to} успешно отправлено.")
        return True
    except Exception as e:
        print(f"Ошибка SMTP при отправке: {e}", file=sys.stderr)
        return False
		
mail_passport = os.environ.get("MAIL_PASSPORT")

if send_message_from_json(mail_passport):
    sys.exit(0)
else:
    sys.exit(1)
'

response=$(python3 -B -c "${command}")
r=$?
if [ $r -ne 0 ]; then
    echo "send_mail: Ошибка отправки по json файлу  ${mail_passport}: ${response}"
    exit $r
fi

echo "send_mail: OK"
exit 0	
		
		
		
		