import logging
from pathlib import Path

import cv2
from datetime import datetime

from plugin import Plugin
from pupil_recording import PupilRecording

logger = logging.getLogger(__name__)


class Clock(Plugin):
    def __init__(self, g_pool):
        super().__init__(g_pool)
        recording = PupilRecording(g_pool.rec_dir)
        self.synced = recording.meta_info.start_time_synced_s
        self.system = recording.meta_info.start_time_system_s
        logger.info(f"Synced: {self.synced}")
        logger.info(f"System: {self.system}")
        logger.info(f"System: {self.system}")

    def recent_events(self, events):
        if "frame" in events:
            frame = events["frame"]
            pupil_time = frame.timestamp
            clock_time = self.clock_time(pupil_time)
            date_time = self.datetime(clock_time)
            self.draw_time(frame.img, date_time)

    def clock_time(self, pupil_time):
        return pupil_time - self.synced + self.system

    @staticmethod
    def datetime(time_in_seconds):
        return datetime.utcfromtimestamp(time_in_seconds).strftime("%Y-%m-%d %H:%M:%S")

    @staticmethod
    def draw_time(frame, time):
        frame_txt_font_name = cv2.FONT_HERSHEY_SIMPLEX
        frame_txt_font_scale = 1.0
        frame_txt_thickness = 1

        # first line: frame index
        frame_txt = str(time)
        frame_txt_size = cv2.getTextSize(
            frame_txt, frame_txt_font_name, frame_txt_font_scale, frame_txt_thickness
        )[0]

        frame_txt_loc = (
            frame.shape[0] // 2 - frame_txt_size[0] // 2,
            frame.shape[1] // 2 - frame_txt_size[1],
        )

        cv2.putText(
            frame,
            frame_txt,
            frame_txt_loc,
            frame_txt_font_name,
            frame_txt_font_scale,
            (255, 255, 255),
            thickness=frame_txt_thickness,
            lineType=cv2.LINE_8,
        )
