import cv2
from pathlib import Path
import datetime
import time
import os
from py_dotenv import read_dotenv
read_dotenv("/home/orangepi/opencv/.env")
cam_name  ="cam1"
cam_index ='/dev/v4l/by-path/platform-xhci-hcd.7.auto-usb-0:1:1.0-video-index0'
video_duration  =int(os.getenv("video_duration"))
label           =os.getenv(cam_name+"_label")
active          =os.getenv(cam_name+"_active")

def record_video(file_name, duration, fps=10):

    
    read_dotenv("/home/orangepi/opencv/.env")
    ignicion=os.getenv("igni")
    act_igni=os.getenv("act_igni")
   
    if act_igni=='off':

        if ignicion=='0':
            time.sleep(5)
            iniciar()
            return 

    
    foldername = datetime.datetime.now().strftime("%Y-%m-%d")
    basepath     = "/home/orangepi/opencv/captures/"+cam_name+"/videos/"+foldername+"/"
    basepath_last= "/home/orangepi/opencv/captures/"+cam_name+"/last/"
    directorio   = Path(basepath)
    directorio2  = Path(basepath_last)

    if not directorio.exists():
        directorio.mkdir(parents=True,exist_ok=True)
    if not directorio2.exists():
        directorio2.mkdir(parents=True,exist_ok=True)

    cap    = cv2.VideoCapture(cam_index)
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out    = cv2.VideoWriter(basepath+file_name, fourcc, fps, (640, 480))
    end_time = time.time() + duration * 60
    color    = (255, 255, 255)
    color2    = (0, 0, 0)
    
    try:
        contador=0
        while time.time() < end_time:
            ret, frame = cap.read()
            videoname    = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
            current_time = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S")
            file_namex   = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")

            cv2.putText(frame, f'{cam_name}  CST: {current_time}', (100,445), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color2, 5)
            cv2.putText(frame, f'{cam_name}  CST: {current_time}', (100,445), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1)

            cv2.putText(frame, f'W:000.000000 N:000.00000  VEL: 0 km.h', (100,465), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color2, 5)
            cv2.putText(frame, f'W:000.000000 N:000.00000  VEL: 0 km.h', (100,465), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1)

            if not ret:
                break

            #resized_frame=cv2.resize(frame,(320,240))
            contador=contador+1
            cv2.imwrite(f"/home/orangepi/opencv/captures/{cam_name}/last/{contador}.jpg",frame,[cv2.IMWRITE_JPEG_QUALITY,55])
            out.write(frame)
            if contador==10:
                contador=0

            #cv2.imshow("Video", frame)

            time.sleep(0.075)

            if cv2.waitKey(250) & 0xFF == ord('q'):
                break

    finally:
        cap.release()
        out.release()
        os.rename(basepath+'tmp.avi',basepath+videoname+'.avi')
        cv2.destroyAllWindows()
        iniciar()

def iniciar():
    video_duration_minutes = video_duration
    file_name="tmp.avi"
    cap2 = cv2.VideoCapture(cam_index)
    ret2, frame2 = cap2.read()
    if ret2:
        cap2.release()
        record_video(file_name, video_duration_minutes)
    else:
        cap2.release()
        print ("camara esta desconectada en indice 1")
        time.sleep(5)
        iniciar()


if __name__ == "__main__":
    if active=="1":
        iniciar()
