#wp_invoices_mail_app/cli.py
import argparse

from apps.wp_invoices_mail_app.config import MailConfig
from apps.wp_invoices_mail_app.services.mailbox_loader import get_mailboxes_for_tenant
from apps.wp_invoices_mail_app.services.mail_processor import process_mailbox
from apps.wp_invoices_mail_app.storage_paths import resolve_tenant_id


def run_once(context=None):
    if not MailConfig.ENABLED:
        print("[wp_invoices_mail_app] Mail bot desactivado (WP_INVOICES_MAIL_ENABLED=0). Saliendo.")
        return

    tenant_id = resolve_tenant_id(context)
    mailboxes = get_mailboxes_for_tenant(tenant_id)

    if not mailboxes:
        mailboxes = [
            {
                "id": "default",
                "provider": "imap",
                "host": MailConfig.IMAP_HOST,
                "port": MailConfig.IMAP_PORT,
                "username": MailConfig.IMAP_USERNAME,
                "password": MailConfig.IMAP_PASSWORD,
                "folder": "INBOX",
            }
        ]

    worker_context = {
        "tenant": {"tenant_id": tenant_id},
        "app_id": "wp_invoices_mail_app",
        "user_id": "system_mail",
        "request_id": (context or {}).get("request_id", "mail-worker"),
    }

    for mailbox in mailboxes:
        process_mailbox(mailbox, worker_context)


def run_test(tenant_id):
    context = {
        "tenant": {"tenant_id": tenant_id},
        "request_id": "test-mail-cli",
        "user_id": "system",
    }

    mailboxes = get_mailboxes_for_tenant(tenant_id)

    if not mailboxes:
        print("No mailboxes found.")
        return

    for mb in mailboxes:
        print(f"Testing mailbox: {mb['username']}")
        process_mailbox(mb, context)


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--tenant")
    args = parser.parse_args()

    if args.tenant:
        run_test(args.tenant)
    else:
        run_once()
