#!/usr/bin/env python3
import phonenumbers
from phonenumbers import NumberParseException, PhoneNumberType

DEFAULT_REGION = "DE"
MIN_DIGITS = 8
MAX_DIGITS = 15

def _digits(s: str) -> str:
    return "".join(c for c in s if c.isdigit())

def _suspicious(digits: str) -> bool:
    # All digits identical → 00000000 / 11111111
    if len(set(digits)) == 1:
        return True
    # Increasing sequence → 12345678
    if all(int(digits[i+1]) - int(digits[i]) == 1 for i in range(len(digits)-1)):
        return True
    # Repeated half pattern → 12121212
    if len(digits) % 2 == 0 and digits[:len(digits)//2] == digits[len(digits)//2:]:
        return True
    return False

def verify_phone(raw: str) -> str:
    raw = raw.strip()
    if not raw:
        return "invalid: empty_input"

    digits = _digits(raw)
    if len(digits) < MIN_DIGITS:
        return "invalid: too_few_digits"
    if len(digits) > MAX_DIGITS:
        return "invalid: too_many_digits"
    if _suspicious(digits):
        return "invalid: suspicious_pattern"

    # Leading zero after +49 → suspicious
    if raw.startswith("+49") and digits[2] == "0":
        return "unknown: leading_zero_after_country_code"

    # Parse number
    try:
        num = phonenumbers.parse(raw, None if raw.startswith("+") else DEFAULT_REGION)
    except NumberParseException:
        return "invalid: parse_error"

    # Impossible number
    if not phonenumbers.is_possible_number(num):
        return "invalid: not_possible_number"

    # Only consider mobile/fixed numbers as fully valid
    num_type = phonenumbers.number_type(num)
    if phonenumbers.is_valid_number(num):
        if num_type in (PhoneNumberType.MOBILE, PhoneNumberType.FIXED_LINE, PhoneNumberType.FIXED_LINE_OR_MOBILE):
            return "valid: confirmed_by_libphonenumber"
        else:
            return "unknown: non_mobile_or_fixed"
    
    # Structurally okay but unconfirmed
    return "unknown: not_confirmed_valid"

if __name__ == "__main__":
    import sys
    print(verify_phone(sys.argv[1]))
