#!/usr/bin/env python3

import cv2
import banner_ivu_export
import numpy as np
from util import fprint
import requests

class qr_reader():
    camera = None
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port
        self.url = "http://" + ip + ":" + str(port) + "/barcode"
        #self.camera = banner_ivu_export.DriveImg(ip, port)

    # def read_qr(self, tries=1):
    #     print("Trying " + str(tries) + " frames.")
    #     self.camera = banner_ivu_export.DriveImg(self.ip, self.port)
    #     for x in range(tries):
    #         print(str(x) + " ", end="", flush=True)
    #         imgtype, img = self.camera.read_img()
                
    #         if img is not None:    
    #             #fprint(imgtype)
    #             image_array = np.frombuffer(img, np.uint8)
    #             img = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
    #             #cv2.imshow('Image', img)
    #             #cv2.waitKey(1)
    #             detect = cv2.QRCodeDetector()
    #             value, points, straight_qrcode = detect.detectAndDecode(img)
                
    #             if value != "":
    #                 self.camera.close()
    #                 return value
    #         else:
    #             print("\nGot no image for " + str(x))

    #     self.camera.close()
    #     return False
    def read_qr(self, tries=1):
        try:
            response = requests.get(self.url, timeout=tries * 15)
            response.raise_for_status()  # Raise an error for bad status codes
            print(response.text)  # Or handle the response as needed
            if len(response.text) < 8:
                return False
            return response.text
        except requests.Timeout:
            print(f'The request timed out after {tries * 15} seconds')
        except requests.RequestException as e:
            print(f'An error occurred: {e}')
        
        return False
    
class video_streamer():
    camera = None
    def __init__(self, ip, port):
        self.camera = banner_ivu_export.DriveImg(ip, port)

    def get_frame(self):
        try:
            return self.camera.read_img()
        except:
            return False

if __name__ == "__main__":
    test = qr_reader("192.168.1.125", 32200)
    import time
    while True:
        fprint(test.read_qr(300))
        time.sleep(1)