import digitalio
import board
from PIL import Image, ImageDraw, ImageFont
import adafruit_rgb_display.st7735 as st7735
import subprocess
from time import sleep
from datetime import datetime
import socket

# --- 設定（お手元の動作コードに合わせました） ---
cs_pin = digitalio.DigitalInOut(board.D23)
dc_pin = digitalio.DigitalInOut(board.D25)
reset_pin = digitalio.DigitalInOut(board.D24)
BAUDRATE = 24000000

spi = board.SPI()
disp = st7735.ST7735R(
    spi, rotation=90, cs=cs_pin, dc=dc_pin, rst=reset_pin, baudrate=BAUDRATE, bgr=True
)

# 画面サイズの取得
if disp.rotation % 180 == 90:
    width = disp.height
    height = disp.width
else:
    width = disp.width
    height = disp.height

# 各種情報を取得する関数
def get_cpu_temp():
    try:
        res = subprocess.check_output(['vcgencmd', 'measure_temp']).decode('utf-8')
        return res.replace("temp=", "").replace("'C\n", "")
    except:
        return "0.0"

def get_ip_address():
    try:
        # 外部へパケットを送るふりをして自端末のIPを特定（確実な方法）
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        ip = s.getsockname()[0]
        s.close()
        return ip
    except:
        return "Disconnected"

# 描画の準備
img = Image.new("RGB", (width, height), (0, 0, 0))
draw = ImageDraw.Draw(img)

# フォントの設定（フォントサイズを少し小さく調整）
font_path = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
try:
    font_small = ImageFont.truetype(font_path, 12)
    font_medium = ImageFont.truetype(font_path, 14)
    font_large = ImageFont.truetype(font_path, 22)
except:
    font_small = font_medium = font_large = ImageFont.load_default()

print("Status Display Start...")

try:
    while True:
        # 背景を塗りつぶし
        draw.rectangle((0, 0, width, height), fill=(0, 0, 0))
        
        # データの取得
        now = datetime.now().strftime("%Y/%m/%d %H:%M")
        ip_addr = get_ip_address()
        temp = get_cpu_temp()
        
        # --- 画面描画 ---
        # 1. 日付時刻
        draw.text((5, 5), now, fill=(200, 200, 200), font=font_small)
        
        # 2. IPアドレス
        draw.text((5, 25), "IP:", fill=(100, 100, 255), font=font_small)
        draw.text((30, 25), ip_addr, fill=(255, 255, 255), font=font_small)
        
        # 区切り線
        draw.line((5, 45, width-5, 45), fill=(50, 50, 50))
        
        # 3. CPU温度
        draw.text((10, 55), "CPU TEMP", fill=(0, 255, 0), font=font_medium)
        draw.text((25, 80), f"{temp} °C", fill=(255, 255, 0), font=font_large)
        
        # 表示更新
        disp.image(img)
        sleep(1)

except KeyboardInterrupt:
    draw.rectangle((0, 0, width, height), fill=(0, 0, 0))
    disp.image(img)
    print("Stopped.")