#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import logging

logger = logging.getLogger(__name__)


def bb_intersection_over_union(boxA, boxB):
    """calculate intersection over union between two boundboxes.

    Args:
        boxA: list of xmin, ymin, xmax, ymax;
        boxB: list of xmin, ymin, xmax, ymax;
    Returns:
        a float number of iou between two inputs.
    """
    # determine the (x, y)-coordinates of the intersection rectangle
    xA = max(boxA[0], boxB[0])
    yA = max(boxA[1], boxB[1])
    xB = min(boxA[2], boxB[2])
    yB = min(boxA[3], boxB[3])

    # compute the area of intersection rectangle
    interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)

    # compute the area of both the prediction and ground-truth
    # rectangles
    boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)
    boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)

    # compute the intersection over union by taking the intersection
    # area and dividing it by the sum of prediction + ground-truth
    # areas - the interesection area
    try:
        iou = interArea / float(boxAArea + boxBArea - interArea)
    except ZeroDivisionError as err:
        logger.exception(err)
        print(boxA, boxB)
    # return the intersection over union value
    return iou


def average_precision_11_point():
    return


def average_precision_matric():
    return
