"""서버에서 web_server.py 캡처 루프를 최적화하는 스크립트"""
path = '/var/www/html/attendance-counter/web_server.py'

with open(path, 'r') as f:
    content = f.read()

import time

if 'last_retrieve_time = 0' not in content:
    content = content.replace('is_connected = False\n        cap = None', 'is_connected = False\n        cap = None\n        last_retrieve_time = 0')

old_capture = """            # 메인 캡처 루프
            try:
                # 단일 read로 빠르게 루프를 돌면서 OpenCV 캡처 수행
                # CAP_PROP_BUFFERSIZE=1 와 함께 적용되어 자동으로 과거 프레임이 소거됨
                ret, frame = cap.read()
                if ret and frame is not None:
                    with self._frame_lock:
                        self._latest_raw_frame = frame
                else:
                    is_connected = False
                    if cap:
                        cap.release()
                        cap = None
                    self._set_status("연결 유실 (재접속 대기)")
                    time.sleep(1)
                
                # 매우 짧게 대기하여 캡처 루프가 카메라 프레임(30fps)보다 빠르게 돌아 버퍼 누적 방지
                time.sleep(0.01)"""

new_capture = """            # 메인 캡처 루프
            try:
                # grab()만 수행하면 압축 해제(디코딩) 없이 네트워크 패킷만 빨리 소모함
                grabbed = cap.grab()
                if grabbed:
                    now = time.time()
                    # 0.1초(10fps) 주기로만 실제 디코딩(retrieve)을 수행하여 라즈베리파이 CPU 부하를 방지하고 지연시간 제거
                    if now - last_retrieve_time >= 0.1:
                        ret_rt, frame = cap.retrieve()
                        if ret_rt and frame is not None:
                            with self._frame_lock:
                                self._latest_raw_frame = frame
                        last_retrieve_time = now
                else:
                    is_connected = False
                    if cap:
                        cap.release()
                        cap = None
                    self._set_status("연결 유실 (재접속 대기)")
                    time.sleep(1)
                
                # time.sleep을 없애서 패킷 소모 속도를 극대화 (grab은 블로킹 함수라 CPU 100% 안침)"""

if old_capture in content:
    content = content.replace(old_capture, new_capture)
    print("OK: web_server.py patched with decode optimization")
else:
    print("SKIP: web_server.py already patched or block not found")

with open(path, 'w') as f:
    f.write(content)

print("DONE: saved")
