import os
import requests
import time
import subprocess
import datetime

print("Save to NAS")

# Enter the NAS path
nas_path = r""
video_dir = os.path.join(nas_path, "videos")
stills_dir = os.path.join(nas_path, "stills")

# Create directories if they don't exist
if not os.path.exists(video_dir):
    os.makedirs(video_dir)
if not os.path.exists(stills_dir):
    os.makedirs(stills_dir)

ip = input("Please enter a Rayfin IP address: ")

still_number = 1
indexPic = 0
index = 1
record_duration = 60  # Duration to record video in seconds
video_bitrate = 5  # Video bitrate in Mbps
video_frame_rate = 30  # Frame rate in fps
rtspURL = f"rtsp://{ip}:5540/ch0"

def record_video():
    timestamp = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
    video_file = os.path.join(video_dir, f'video-{timestamp}.mp4')

    # FFMPEG command to record video
    ffmpeg_cmd = [
        'ffmpeg',
        '-loglevel', 'info',  # Set log level to get detailed information
        '-rtsp_transport', 'tcp',  # Use TCP transport for RTSP
        '-i', f'{rtspURL}',  # Input device (camera)
        '-t', str(record_duration),  # Recording duration
        '-vcodec', 'libx264',  # Video codec (e.g., H.264)
        '-b:v', f'{video_bitrate}M',  # Bitrate
        '-r', str(video_frame_rate),  # Frame rate
        '-bufsize', f'{video_bitrate * 2}M',  # Buffer size
        video_file  # Output file
    ]

    # Start recording
    print(f"Recording video to {video_file}")
    result = subprocess.run(ffmpeg_cmd, capture_output=True, text=True)

    if result.returncode != 0:
        print(f"FFMPEG error: {result.stderr}")
    else:
        print(f"Finished recording video to {video_file}")

# Record video
record_video()

while True:
    start_time = time.time()

    try:
        # Take and save still images
        response = requests.get(f"http://{ip}:8080/api/still/takeandget")
        print(stills_dir)

        if response.status_code == 200:
            if indexPic >= 10000:
                stills_dir = os.path.join(nas_path, f"stills_{index}")
                # Create directory if it doesn't exist
                if not os.path.exists(stills_dir):
                    os.makedirs(stills_dir)
                indexPic = 0

            file_name = os.path.join(stills_dir, f"{still_number}_.jpg")
            with open(file_name, 'wb') as file_stream:
                file_stream.write(response.content)

            still_number += 1
            indexPic += 1

            elapsed_time = (time.time() - start_time) * 1000  # Convert to milliseconds
            print(f"Total number of stills taken: {still_number} +++> Total Time {elapsed_time:.2f}ms")
        else:
            print(f"Failed to take still: {response.status_code}")
        
        time.sleep(2)  # Wait for 2000 milliseconds

    except Exception as ex:
        print(ex)
        print("Failed to grab")
        response.raise_for_status()  # Raise an error for bad responses
