#!/usr/bin/env python3

try:
    from inmon_utils import *
except:
    import sys
    printa("Failed to import inmon_utils")
    sys.exit(3)

import poplib
import email
import logging
import argparse

parser = argparse.ArgumentParser(description="Checks status of mailflow checks on INDIGEX Side")

parser.add_argument(
    "-H", "--hostname",
    dest="hostname",
    help="Specify hostname of server to connect to",
    required=True
)
parser.add_argument(
    "-U", "--username",
    dest="username",
    help="Specify username of mailbox to log into",
    required=True
)
parser.add_argument(
    "-P", "--password",
    dest="password",
    help="Specify password of mailbox to log into",
    required=True
)
parser.add_argument(
    "-p", "--port",
    dest="port",
    help="Specify used pop3 port"
)
parser.add_argument(
    "-s", "--subject",
    dest="subject",
    help="Specify subject to search for",
    required=True
)
parser.add_argument(
    "-S", "--ssl",
    dest="useSSL",
    help="Use SSL",
    action="store_true"
)
parser.add_argument(
    "-v", "--verbose",
    dest="verbose",
    help="Enable verbose output",
    action="store_true"
)
parser.add_argument(
    "-d", "--debug",
    dest="debug",
    help="Enable debugging output",
    action="store_true"
)

args = parser.parse_args()

if args.port is not None:
    port = args.port
elif args.useSSL:
    port = 995
else:
    port = 110

if args.verbose:
    log_level = "INFO"
elif args.debug:
    log_level = "DEBUG"
else:
    log_level = "WARN"

log_level = getattr(logging, log_level.upper())
logging.basicConfig(level=log_level)
logger = logging.getLogger()

logger.debug(f"""
    args.hostname: {args.hostname}
    args.username: {args.username}
    args.password: {args.password}
    port: {port}
    args.subject: {args.subject}
    args.useSSL: {args.useSSL}
""")

logger.debug("Attempting to create POP3 context")
if args.useSSL:
    pop = poplib.POP3_SSL(args.hostname, port)
else:
    pop = poplib.POP3(args.hostname, port)


logger.debug("Attempting to login.")
try:
    pop.user(args.username)
    pop.pass_(args.password)
except poplib.error_proto as e:
    print(f"Login failed: {e}")
else:
    numMessages = len(pop.list()[1])
    logger.verbose(f"You have {numMessages} messages")
    logger.verbose("Message list:")

    for mList in range(numMessages):
        for msg in pop.retr(mList+1)[1]:
            if msg.startswith(f"Subject: {args.subject}"):
                msgCount += 1
                logger.verbose(f"\t {msg}")
                pop.dele(mList+1)
                break
    logger.verbose(f"{msgCount} Messages Deleted")

pop.quit()

if msgCount == 0:
    print("POP3 RECEIVE CRITICAL: no messages found")
    sys.exit(2)
elif msgCount >0:
    print(f"POP3 RECEIVE OK: {numMessages} found, {msgCount} deleted")
    sys.exit(0)
else:
    print(f"POP3 RECEIVE UNKNOWN: Something weird happened.")
    sys.exit(3)
