import gxipy as gx
import cv2
import numpy as np


def main():
    print("Инициализация камер...")
    
    # Создаем менеджер устройств
    device_manager = gx.DeviceManager()
    dev_num, dev_info_list = device_manager.update_all_device_list()
    
    if dev_num < 2:
        print(f"Найдено только {dev_num} камер. Нужно 2 камеры!")
        return

    # Открываем обе камеры
    cam1 = device_manager.open_device_by_index(1)
    cam2 = device_manager.open_device_by_index(2)
    
    remote_device_feature1 = cam1.get_remote_device_feature_control()
    remote_device_feature2 = cam2.get_remote_device_feature_control()    
    
    exposure_time_feature1 = remote_device_feature1.get_float_feature("ExposureTime") 
    exposure_time_feature2 = remote_device_feature2.get_float_feature("ExposureTime")    
    print(exposure_time_feature1.get())
    print(exposure_time_feature2.get())    
    gain_value1 = remote_device_feature1.get_float_feature("Gain")
    gain_value2 = remote_device_feature2.get_float_feature("Gain")
    print(gain_value1.get())
    print(gain_value2.get())
    
    #exposure_time_feature1.set(100000.0)
    #exposure_time_feature2.set(100000.0)  
    
    # Настраиваем обе камеры
    for cam in [cam1, cam2]:
        cam.TriggerMode.set(0)  # Непрерывный режим
    
    # Включаем потоки данных
    cam1.stream_on()
    cam2.stream_on()

    print("Запуск видеопотоков с двух камер. Нажмите 'q' для выхода...")
    
    try:
        while True:
            # Получаем изображения с обеих камер
            raw_image1 = cam1.data_stream[0].get_image()
            raw_image2 = cam2.data_stream[0].get_image()
            
            # Обрабатываем первую камеру
            if raw_image1 is not None:
                numpy_image1 = raw_image1.get_numpy_array()
                if numpy_image1 is not None:
                    cv2.imshow('Camera 1', numpy_image1)
            
            # Обрабатываем вторую камеру
            if raw_image2 is not None:
                numpy_image2 = raw_image2.get_numpy_array()
                if numpy_image2 is not None:
                    cv2.imshow('Camera 2', numpy_image2)
            
            # Выход по нажатию 'q'
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
                
    except KeyboardInterrupt:
        print("Прервано пользователем")
    
    finally:
        # Очистка
        cv2.destroyAllWindows()
        cam1.stream_off()
        cam2.stream_off()
        cam1.close_device()
        cam2.close_device()
        print("Камеры отключены")


if __name__ == "__main__":
    main()