import os
import numpy as np
import cv2
from PIL import Image
from surround_view import FisheyeCameraModel, display_image, BirdView
import surround_view.param_settings as settings


def main():
    names = settings.camera_names
    images = [os.path.join(os.getcwd(), "images", name + ".png") for name in names]
    yamls = [os.path.join(os.getcwd(), "yaml", name + ".yaml") for name in names]
    camera_models = [FisheyeCameraModel(camera_file, camera_name) for camera_file, camera_name in zip (yamls, names)]

    projected = []
    for image_file, camera in zip(images, camera_models):
        img = cv2.imread(image_file)
        img = camera.undistort(img)
        img = camera.project(img)
        img = camera.flip(img)
        projected.append(img)

    birdview = BirdView()
    Gmat, Mmat = birdview.get_weights_and_masks(projected)
    birdview.update_frames(projected)
    # birdview.make_luminance_balance().stitch_all_parts()
    birdview.stitch_all_parts()
    birdview.make_white_balance()
    birdview.copy_car_image()
    img_samll = cv2.resize(birdview.image,(320,600))
    cv2.imshow("BirdView Result", img_samll)
    while True:
        key = cv2.waitKey(1) & 0xFF
        if key == ord("q"):
            return -1
        # cv2.waitKey(1)
        # cmd = input().strip().lower()
        # if cmd == 'q':
        #     cv2.destroyAllWindows()
        #     return -1



    # birdview.copy_car_image()
    # ret = display_image("BirdView Result", birdview.image)

    # if ret > 0:
    #     Image.fromarray((Gmat * 255).astype(np.uint8)).save("weights.png")
    #     Image.fromarray(Mmat.astype(np.uint8)).save("masks.png")


if __name__ == "__main__":
    main()
