import cv2
import numpy as np

from app.ml.predict import predict_land_type


def classify_region(image):

    blue_mean = np.mean(image[:, :, 0])
    green_mean = np.mean(image[:, :, 1])
    red_mean = np.mean(image[:, :, 2])

    blue_std = np.std(image[:, :, 0])
    green_std = np.std(image[:, :, 1])
    red_std = np.std(image[:, :, 2])

    ndvi = (green_mean - red_mean) / (
        green_mean + red_mean + 1e-10
    )

    brightness = np.mean(
        cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    )

    edges = cv2.Canny(image, 100, 200)

    edge_density = np.mean(edges)

    features = [
        red_mean,
        green_mean,
        blue_mean,

        red_std,
        green_std,
        blue_std,

        ndvi,
        brightness,
        edge_density
    ]

    return predict_land_type(features)