import imaplib
import email
import os

from dotenv import load_dotenv
from email.header import decode_header
from email.utils import parsedate_to_datetime
from datetime import datetime, timedelta, timezone
import os
import pymysql

from dotenv import load_dotenv


promo = input("Promo/Ödeme Hangisi : ")

if promo == 'promo':
    promo = True
elif promo == 'ödeme':
    promo = False
else:
    exit(0)

load_dotenv()

base_dir = os.path.dirname(os.path.abspath(__file__))


def get_creator_by_username(username: str):

    conn = pymysql.connect(
        host=os.getenv("DB_HOST"),
        port=int(os.getenv("DB_PORT", 3306)),
        user=os.getenv("DB_USER"),
        password=os.getenv("DB_PASS"),
        database=os.getenv("DB_NAME"),
        charset="utf8mb4",
        cursorclass=pymysql.cursors.DictCursor
    )

    try:
        with conn.cursor() as cursor:

            cursor.execute(
                "SELECT creator, created_at FROM emails WHERE username = %s LIMIT 1",
                (username,)
            )

            row = cursor.fetchone()

            if not row:
                return None

            return row["creator"], row['created_at']

    finally:
        conn.close()



def decode_mime_words(s):
    if not s:
        return ""

    decoded_parts = []

    for part, encoding in decode_header(s):

        if isinstance(part, bytes):
            decoded_parts.append(
                part.decode(encoding or "utf-8", errors="ignore")
            )
        else:
            decoded_parts.append(part)

    return "".join(decoded_parts)

load_dotenv()

IMAP_HOST = os.getenv("IMAP_HOST")
IMAP_EMAIL = os.getenv("IMAP_EMAIL")
IMAP_PASSWORD = os.getenv("IMAP_PASSWORD")
IMAP_FOLDER = os.getenv("IMAP_FOLDER", "INBOX")

mail = imaplib.IMAP4_SSL(IMAP_HOST)

mail.login(IMAP_EMAIL, IMAP_PASSWORD)

mail.select(IMAP_FOLDER)

since_date = (datetime.now() - timedelta(days=2)).strftime("%d-%b-%Y")

status, messages = mail.search(None, f'(SINCE "{since_date}")')

mail_ids = messages[0].split()

last_24_hours = datetime.now(timezone.utc) - timedelta(hours=24)
i = 0
dio = 0
koray = 0
data = {}
for mail_id in reversed(mail_ids):

    status, msg_data = mail.fetch(mail_id, "(RFC822)")

    raw_email = msg_data[0][1]

    msg = email.message_from_bytes(raw_email)

    mail_date = parsedate_to_datetime(msg.get("Date"))

    if mail_date.tzinfo is None:
        mail_date = mail_date.replace(tzinfo=timezone.utc)

    if mail_date < last_24_hours:
        continue

    subject = decode_mime_words(msg.get("Subject"))
    if '$' in subject:
        if promo:
            if 'teklif' in subject:
                i += 1
                to = msg.get("To")
                username = to.split("@")[0]
                creator, created_at = get_creator_by_username(username)
                if 'dio' in creator:
                    dio += 1
                if 'koray' in creator:
                    koray += 1
                
                fix_date = str(created_at)[:10]

                if fix_date not in data:
                    data[fix_date] = []
                data[fix_date].append({"username": username, "creator": creator})

                print(f"{i} TITLE:", subject)
                print(f"TO: {username} ({creator})")
                print(f"CREATED AT: {created_at}")
                print("-" * 50)
        else:
            if 'kazand' in subject:
                i += 1
                to = msg.get("To")
                username = to.split("@")[0]
                creator, created_at = get_creator_by_username(username)
                if 'dio' in creator:
                    dio += 1
                if 'koray' in creator:
                    koray += 1
                
                fix_date = str(created_at)[:10]

                if fix_date not in data:
                    data[fix_date] = []
                data[fix_date].append({"username": username, "creator": creator})

                print(f"{i} TITLE:", subject)
                print(f"TO: {username} ({creator})")
                print(f"CREATED AT: {created_at}")
                print("-" * 50)

for date, usernames in data.items():
    textname = "-promo" if promo else "-odeme"
    filename = os.path.join(base_dir, f"{date}{textname}.txt")

    with open(filename, "w", encoding="utf-8") as f:
        text = ""
        for r in usernames:
            text += f"{r['username']} - {r['creator']}" + "\n"
        f.write(text.strip("\n"))

    print(f"YAZILDI: {filename}")

print(f"TOPLAM: {i}, DIO: {dio}, KORAY: {koray}")
mail.logout()