#!/bin/bash
# Generate and check copyright-enforcement domain candidates
# Usage: ./generate_copyright_domains.sh

# Letters that map to copyright/IP enforcement words
FIRST_LETTERS="c e i p r m s a d t g w n o b f v h l"
ALL_LETTERS="a b c d e f g h i l m n o p r s t v w"

# Vowels for pronounceability
VOWELS="aeiou"

# Function: check if word is pronounceable (has at least 2 vowels, no triple consonants)
is_pronounceable() {
    word="$1"
    vowel_count=$(echo "$word" | grep -o "[$VOWELS]" | wc -l)
    [ "$vowel_count" -lt 1 ] && return 1
    # Check for 3+ consecutive consonants
    echo "$word" | grep -qE '[bcdfghjklmnpqrstvwxz]{3,}' && return 1
    return 0
}

# Function: score word by copyright letter density
score_word() {
    word="$1"
    score=0
    echo "$word" | grep -q "c" && score=$((score + 3))
    echo "$word" | grep -q "e" && score=$((score + 3))
    echo "$word" | grep -q "i" && score=$((score + 3))
    echo "$word" | grep -q "p" && score=$((score + 3))
    echo "$word" | grep -q "r" && score=$((score + 2))
    echo "$word" | grep -q "m" && score=$((score + 2))
    echo "$word" | grep -q "s" && score=$((score + 2))
    echo "$word" | grep -q "a" && score=$((score + 2))
    echo "$word" | grep -q "d" && score=$((score + 2))
    echo "$word" | grep -q "t" && score=$((score + 1))
    echo "$word" | grep -q "g" && score=$((score + 1))
    echo "$word" | grep -q "w" && score=$((score + 1))
    echo "$word" | grep -q "n" && score=$((score + 1))
    echo "$word" | grep -q "o" && score=$((score + 1))
    echo "$word" | grep -q "b" && score=$((score + 1))
    echo "$word" | grep -q "f" && score=$((score + 1))
    echo "$word" | grep -q "v" && score=$((score + 1))
    echo "$word" | grep -q "h" && score=$((score + 1))
    echo "$word" | grep -q "l" && score=$((score + 1))
    echo "$word" | grep -q "z" && score=$((score - 3))
    echo "$word" | grep -q "q" && score=$((score - 2))
    echo "$word" | grep -q "x" && score=$((score - 2))
    echo "$word" | grep -q "j" && score=$((score - 1))
    echo "$word" | grep -q "k" && score=$((score - 1))
    echo "$word" | grep -q "u" && score=$((score - 0))
    echo "$word" | grep -q "y" && score=$((score - 0))
    
    # Bonus for good endings
    last=$(echo "$word" | tail -c 2)
    case "$last" in
        a) score=$((score + 1)) ;;
        r) score=$((score + 1)) ;;
        s) score=$((score + 1)) ;;
        c) score=$((score + 1)) ;;
        d) score=$((score + 1)) ;;
    esac
    
    echo "$score"
}

# Function: check DNS availability (NXDOMAIN = available)
check_dns() {
    domain="$1.com"
    ns=$(dig +short "$domain" NS 2>/dev/null | head -1)
    a=$(dig +short "$domain" A 2>/dev/null | head -1)
    if [ -z "$ns" ] && [ -z "$a" ]; then
        echo "AVAILABLE"
    else
        echo "TAKEN"
    fi
}

echo "================================================================"
echo "  COPYRIGHT ENFORCEMENT DOMAIN CANDIDATE GENERATOR"
echo "  Generating 4-6 letter .com patterns and checking availability"
echo "================================================================"
echo ""

# Generate candidate list
TMPDIR="${TMPDIR:-/tmp}"
CANDIDATES="$TMPDIR/copyright_candidates_$$.txt"
> "$CANDIDATES"

# Priority 1: Start with C, E, I, P, R (most relevant)
for first in c e i p r; do
    for second in $ALL_LETTERS; do
        for third in $ALL_LETTERS; do
            for fourth in $ALL_LETTERS; do
                word="${first}${second}${third}${fourth}"
                if is_pronounceable "$word"; then
                    score=$(score_word "$word")
                    if [ "$score" -ge 8 ]; then
                        echo "$score $word" >> "$CANDIDATES"
                    fi
                fi
            done
        done
    done
done

# Also generate 5-letter variants
for first in c e i p r m s a d; do
    for second in $ALL_LETTERS; do
        for third in $ALL_LETTERS; do
            for fourth in $ALL_LETTERS; do
                for fifth in $ALL_LETTERS; do
                    word="${first}${second}${third}${fourth}${fifth}"
                    if is_pronounceable "$word"; then
                        score=$(score_word "$word")
                        if [ "$score" -ge 10 ]; then
                            echo "$score $word" >> "$CANDIDATES"
                        fi
                    fi
                done
            done
        done
    done
done

# Sort and deduplicate
sort -t' ' -k1,1 -nr "$CANDIDATES" | awk '!seen[$2]++' > "$CANDIDATES.sorted"

echo "Generated $(wc -l < "$CANDIDATES.sorted") candidate patterns"
echo ""
echo "Checking DNS availability for top 50..."
echo ""

# Check top 50
count=0
echo "Score | Domain      | Status"
echo "------|-------------|--------"
while read -r score word; do
    [ "$count" -ge 50 ] && break
    status=$(check_dns "$word")
    printf "%5s | %-11s | %s\n" "$score" "$word.com" "$status"
    if [ "$status" = "AVAILABLE" ]; then
        echo "AVAILABLE: $score $word.com" >> "$TMPDIR/available_domains_$$.txt"
    fi
    count=$((count + 1))
done < "$CANDIDATES.sorted"

echo ""
echo "================================================================"
echo "  AVAILABLE DOMAINS (if any):"
echo "================================================================"
if [ -f "$TMPDIR/available_domains_$$.txt" ]; then
    cat "$TMPDIR/available_domains_$$.txt" | sort -t' ' -k1,1 -nr | head -20
    echo ""
    echo "Register these immediately on Namecheap/Cloudflare/Porkbun"
    echo "before someone else does."
else
    echo "No available domains found in the top 50 checked."
    echo "This is normal — good 4-letter .com domains are extremely scarce."
    echo ""
    echo "Next steps:"
    echo "  1. Run the full list against expireddomains.net"
    echo "  2. Backorder specific names on DropCatch.com"
    echo "  3. Check 5-6 letter variants (less competition)"
fi

echo ""
echo "Full candidate list saved to: $CANDIDATES.sorted"
echo ""

# Cleanup
rm -f "$CANDIDATES" "$TMPDIR/available_domains_$$.txt"
