from picamera2 import Picamera2
from libcamera import controls
from picamera2.encoders import H264Encoder
from datetime import datetime
import time
import csv
import glob
import os

# -------------------------------
# Temperature sensor setup
# -------------------------------
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28-*')[0]
device_file = device_folder + '/w1_slave'

def read_temp():
    with open(device_file, 'r') as f:
        lines = f.readlines()
    if lines[0].strip()[-3:] != 'YES':
        return None
    temp_str = lines[1].split('t=')[-1]
    return float(temp_str) / 1000.0

# -------------------------------
# Camera setup
# -------------------------------
# -------------------------------
# Camera setup
# -------------------------------
picam2 = Picamera2()
picam2.configure(picam2.create_video_configuration())

picam2.start()
time.sleep(2)  # camera warm-up

# --- FIXED MANUAL FOCUS FOR FISH ---
picam2.set_controls({
    "AfMode": controls.AfModeEnum.Manual,
    "LensPosition": 0.35   # adjust between 0.30–0.40
})

time.sleep(1)  # allow focus to settle

encoder = H264Encoder(bitrate=10000000)
# -------------------------------
# Data folders
# -------------------------------
os.makedirs("videos", exist_ok=True)
os.makedirs("logs", exist_ok=True)

csv_path = "logs/temperature.csv"
csv_exists = os.path.isfile(csv_path)

csv_file = open(csv_path, "a", newline="")
csv_writer = csv.writer(csv_file)

if not csv_exists:
    csv_writer.writerow(["timestamp", "temperature_C"])

# -------------------------------
# Main loop
# -------------------------------
try:
    while True:
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        # Read temperature
        temp = read_temp()
        if temp is not None:
            csv_writer.writerow([timestamp, f"{temp:.2f}"])
            csv_file.flush()

        # Record video
        video_name = f"videos/video_{timestamp.replace(':','-').replace(' ','_')}.h264"
        picam2.start_recording(encoder,video_name)
        time.sleep(10)
        picam2.stop_recording()

        # Wait 1 minute
        time.sleep(60)

except KeyboardInterrupt:
    pass

finally:
    picam2.stop()
    csv_file.close()
