#!/usr/bin/env python3

from escpos import *
from PIL import Image
import os 
import subprocess
import time
import random
import requests
from urllib.parse import quote

OBJECT_WORDS = [
    # Household
    "chair", "table", "bed", "sofa", "lamp", "mirror", "clock", "rug", "curtain", "pillow",
    "blanket", "mattress", "dresser", "cabinet", "cushion", "towel", "toothbrush", "toothpaste", "soap", "shampoo",
    "conditioner", "bathtub", "shower", "toilet", "sink", "faucet", "bucket", "broom", "mop", "vacuum",
    
    # Kitchen
    "fridge", "freezer", "microwave", "oven", "stove", "pan", "pot", "plate", "bowl", "cup",
    "mug", "glass", "spoon", "fork", "knife", "ladle", "whisk", "tongs", "grater", "peeler",
    "blender", "toaster", "kettle", "cutting board", "napkin", "coaster", "measuring cup", "measuring spoon", "dishwasher", "tray",
    
    # Office/School
    "desk", "chair", "notebook", "pen", "pencil", "marker", "eraser", "ruler", "calculator", "scissors",
    "glue", "paper", "folder", "binder", "clip", "tape", "stapler", "staples", "highlighter", "whiteboard",
    "projector", "laptop", "computer", "mouse", "keyboard", "monitor", "printer", "cable", "router", "charger",
    
    # Personal items
    "wallet", "phone", "watch", "glasses", "sunglasses", "hat", "jacket", "scarf", "shirt", "pants",
    "shorts", "shoes", "socks", "belt", "bag", "backpack", "suitcase", "umbrella", "key", "keychain",
    "comb", "brush", "mirror", "lotion", "perfume", "deodorant", "nail clipper", "razor", "makeup", "lipstick",
    
    # Electronics
    "TV", "remote", "camera", "tripod", "microphone", "speaker", "headphones", "battery", "lightbulb", "fan",
    "heater", "air conditioner", "thermostat", "game console", "joystick", "tablet", "smartwatch", "flash drive", "hard drive", "drone",

    # Tools
    "hammer", "screwdriver", "wrench", "pliers", "saw", "drill", "nail", "screw", "bolt", "nut",
    "tape measure", "level", "chisel", "axe", "shovel", "ladder", "toolbox", "work gloves", "flashlight", "crowbar",
    
    # Art/music
    "paintbrush", "canvas", "palette", "easel", "crayon", "chalk", "charcoal", "ink", "violin", "guitar",
    "piano", "flute", "drum", "trumpet", "microphone", "amp", "sheet music", "metronome", "pick", "tuner",
    
    # Toys/Games
    "ball", "doll", "puzzle", "board game", "card", "dice", "yo-yo", "kite", "teddy bear", "lego",
    "action figure", "marble", "slingshot", "skateboard", "bike", "helmet", "scooter", "trampoline", "swing", "slide",
    
    # Nature-related
    "rock", "stick", "leaf", "flower", "tree", "shell", "feather", "pinecone", "sand", "mud",
    "log", "acorn", "fruit", "apple", "banana", "orange", "grape", "pear", "mango", "watermelon",
    
    # Misc
    "trophy", "medal", "flag", "banner", "map", "globe", "calendar", "watch", "ticket", "passport",
    "ID card", "coin", "bill", "envelope", "stamp", "basket", "box", "crate", "bin", "jar",
    "bottle", "can", "barrel", "hose", "funnel", "net", "rope", "chain", "hook", "magnet",
    
    # Vehicles/Transport
    "car", "truck", "bus", "bicycle", "motorcycle", "train", "plane", "boat", "ship", "scooter",
    "skates", "wheel", "engine", "mirror", "seatbelt", "tire", "pedal", "horn", "trunk", "helmet"

        # Mammals
    "dog", "cat", "horse", "cow", "pig", "goat", "sheep", "lion", "tiger", "elephant",
    "monkey", "chimpanzee", "gorilla", "deer", "moose", "bear", "wolf", "fox", "rabbit", "kangaroo",
    "rat", "mouse", "squirrel", "bat", "zebra", "giraffe", "leopard", "cheetah", "panther", "raccoon",
    "otter", "hedgehog", "sloth", "armadillo", "koala", "beaver", "buffalo", "bison", "donkey", "reindeer",

    # Birds
    "sparrow", "pigeon", "crow", "eagle", "hawk", "falcon", "owl", "duck", "goose", "swan",
    "penguin", "parrot", "canary", "flamingo", "peacock", "chicken", "rooster", "turkey", "vulture", "woodpecker",
    "heron", "ostrich", "emu", "seagull", "albatross", "dove", "crane", "bluejay", "hummingbird", "toucan",

    # Reptiles & Amphibians
    "snake", "lizard", "crocodile", "alligator", "gecko", "iguana", "chameleon", "turtle", "tortoise", "frog",
    "toad", "salamander", "newt", "python", "cobra", "viper", "anole", "skink", "monitor", "komodo dragon",

    # Fish & Aquatic Creatures
    "shark", "dolphin", "whale", "seal", "sea lion", "otter", "octopus", "squid", "jellyfish", "crab",
    "lobster", "clam", "oyster", "starfish", "eel", "ray", "anchovy", "tuna", "salmon", "trout",
    "bass", "catfish", "swordfish", "marlin", "anglerfish", "pufferfish", "seahorse", "guppy", "goldfish", "betta",

    # Insects & Arachnids
    "ant", "bee", "wasp", "hornet", "butterfly", "moth", "fly", "mosquito", "dragonfly", "grasshopper",
    "cricket", "ladybug", "beetle", "firefly", "termite", "cockroach", "aphid", "spider", "scorpion", "tick",

    # Farm & Domestic Animals
    "cow", "horse", "pig", "goat", "sheep", "chicken", "dog", "cat", "duck", "goose",
    "donkey", "rabbit", "llama", "alpaca", "turkey", "ox", "rooster", "hen", "ferret", "guinea pig",

    # Jungle/Wild Animals
    "tiger", "lion", "panther", "leopard", "jaguar", "monkey", "gorilla", "chimpanzee", "elephant", "rhino",
    "hippopotamus", "giraffe", "zebra", "hyena", "baboon", "okapi", "aardvark", "warthog", "capybara", "tapir",

    # Arctic/Antarctic Animals
    "polar bear", "walrus", "seal", "penguin", "orca", "narwhal", "snowy owl", "arctic fox", "caribou", "musk ox",

    # Desert Animals
    "camel", "fennec fox", "meerkat", "jerboa", "scorpion", "gila monster", "horned lizard", "kudu", "oryx", "roadrunner",
]


# Return T20II printer
def get_T20II_usb():
    p = printer.Usb(0x04b8, 0x0202) #, profile="TM-T20II")
    # p.set_with_default(align='center', font='a', bold=False, width=2, height=2, custom_size=True, smooth=True)
    return p

def get_T20II_ethernet():
    p = printer.Network("192.168.192.168", port=9100)#, profile="TM-T20II")
    # p.set_with_default(align='center', font='a', bold=False, width=2, height=2, custom_size=True, smooth=True)
    return p

def resize_image_to_fullwidth(img_src_name, target_width=576):
    # Make fullwidth dir
    os.makedirs('img_fullwidth', exist_ok=True)

    # Open the image
    img = Image.open(img_src_name)

    # Get original dimensions
    width, height = img.size

    # Calculate new height to maintain aspect ratio
    aspect_ratio = height / width
    new_height = int(target_width * aspect_ratio)

    # Resize the image
    resized_img = img.resize((target_width, new_height), Image.LANCZOS)

    # Save the resized image
    name, ext = os.path.splitext(img_src_name)
    filename_no_ext = os.path.splitext(os.path.basename(img_src_name))[0]

    # Build destination filename
    dest_name = f"img_fullwidth/{filename_no_ext}_fullwidth{ext}"
    resized_img.save(dest_name)
    return dest_name

import os
import requests
import random

def get_random_bant_image():
    # Create img directory if it doesn't exist
    os.makedirs('img', exist_ok=True)
    
    # Fetch the catalog JSON for /bant/
    url = "https://a.4cdn.org/bant/catalog.json"
    response = requests.get(url)
    response.raise_for_status()
    catalog = response.json()
    
    # Flatten the list of threads from all pages
    threads = [thread for page in catalog for thread in page['threads']]
    
    # Filter threads that have images (tim and ext fields)
    image_threads = [
        thread for thread in threads
        if 'tim' in thread and 'ext' in thread and thread['ext'].lower() not in ['.gif', '.mp4', '.webm']
    ]
    
    if not image_threads:
        return None  # No images found
    
    # Choose a random thread with an image
    thread = random.choice(image_threads)
    
    # Construct image URL
    image_url = f"https://i.4cdn.org/bant/{thread['tim']}{thread['ext']}"
    filename = f"img/{thread['tim']}{thread['ext']}"
    
    # Download and save image
    img_response = requests.get(image_url)
    img_response.raise_for_status()
    
    with open(filename, 'wb') as f:
        f.write(img_response.content)
    
    return filename

def print_random_bant_image(p, sh_file):
    img = get_random_bant_image()
    filename_no_ext = os.path.splitext(os.path.basename(img))[0]
    p.textln(filename_no_ext)
    fimg = resize_image_to_fullwidth(img)
    try:
        p.image(fimg, impl='bitImageColumn');
    except:
        subprocess.run(["bash", sh_file], check=True)
        p = get_T20II_ethernet()
    p.cut()

def main():
    script_dir = os.path.dirname(os.path.abspath(__file__))
    sh_file = os.path.join(script_dir, "connect_recipt.sh")
    subprocess.run(["bash", sh_file], check=True)
    p = get_T20II_ethernet()

    print_random_bant_image(p, sh_file)
    return

if __name__ == "__main__":
    main()

def fun(p, sh_file):
    #img = "screenshot-81127714.png"
    #img = "screenshot-004226ce.jpg"
    #img = "screenshot-004226ce.png"
    #img = "screenshot-9b84483a.jpg"
    #fimg = resize_image_to_fullwidth(img)
    #p.image(fimg, impl='bitImageColumn');
    #p.cut()

    # p = get_T20II_usb()
    # p.cut()
    # img = "IMG_3392.jpg"
    # fimg = resize_image_to_fullwidth(img)
    # try:
    # p.image(fimg, impl='bitImageColumn');
    # except:
    # subprocess.run(["bash", sh_file], check=True)
    # p = get_T20II_usb()
    # p.cut()
    # img = "img_fullwidth/1752696013663080_fullwidth.png"
    # fimg = resize_image_to_fullwidth(img)
    # try:
    # p.image(fimg, impl='bitImageColumn');
    # except:
    # subprocess.run(["bash", sh_file], check=True)
    # p = get_T20II_usb()
    # p.cut()
    # img = "PHOTO-2025-08-21-13-21-47.jpg"
    # fimg = resize_image_to_fullwidth(img)
    # try:
    # p.image(img, impl='graphics');
    # except:
    # subprocess.run(["bash", sh_file], check=True)
    # p = get_T20II_usb()
    # p.cut()
    return 0;
    
