#!/usr/bin/env python3
import sys
import re
from collections import Counter

def mail_summary(conn_type, domain_filter, status_filter):
    log_path = '/var/log/mail.log'
    stats = Counter()
    last_ip = {}
    
    # Ha a domain '.' vagy 'all' vagy üres, akkor minden domaint elfogadunk
    show_all_domains = domain_filter in ['.', '', 'all', 'any']

    try:
        with open(log_path, 'r') as f:
            for line in f:
                # 1. Alap szűrés: típus (pop3d/imapd) és státusz (FAILED/SUCCESS)
                if conn_type.lower() in line.lower() and status_filter.upper() in line.upper():
                    
                    # 2. User és IP kinyerése
                    user_match = re.search(r'user=([^, ]+)', line)
                    ip_match = re.search(r'ip=\[?(?::ffff:)?([\d\.]+)\]?', line)
                    
                    if user_match and ip_match:
                        user = user_match.group(1)
                        ip = ip_match.group(2)
                        
                        # 3. Domain szűrés (ha nem 'all' van megadva)
                        if show_all_domains or domain_filter.lower() in user.lower():
                            stats[user] += 1
                            last_ip[user] = ip

        if not stats:
            print(f"\nNincs találat: {conn_type} | {domain_filter} | {status_filter}")
            return

        print(f"\n{'Típus':<7} | {'Státusz':<8} | {'Fiók név':<35} | {'IP (utolsó)':<15} | {'Találat'}")
        print("-" * 85)
        
        for user, count in stats.most_common():
            print(f"{conn_type.upper():<7} | {status_filter.upper():<8} | {user:<35} | {last_ip[user]:<15} | {count} db")

    except Exception as e:
        print(f"Hiba: {e}")

if __name__ == "__main__":
    if len(sys.argv) < 4:
        print("Használat: sudo python3 mail_summary.py <TÍPUS> <DOMAIN> <STÁTUSZ>")
        print("Összes domainhez: sudo python3 mail_summary.py pop3d all FAILED")
        sys.exit(1)

    mail_summary(sys.argv[1], sys.argv[2], sys.argv[3])
