"""
Specify the validation rules for each field in the differents record.
"""

def validate_walls_description(value):
    if value not in ["Cavity", "Solid", "System built", "Timber frame", "Suspended timber", "Other"]:
        raise ValueError("Walls description is not valid")

EPCRecordValidationConfiguration = {
    "WALLS_DESCRIPTION": {
        "type": "string",
        "acceptable_values": ["Cavity", "Solid", "System built", "Timber frame", "Suspended timber", "Other"],
        "function": validate_walls_description 
    },
    "FLOOR_DESCRIPTION": {
        "type": "string",
        "acceptable_values": ["Solid", "Suspended", "Other"]
    },
    "ENERGY_CONSUMPTION_CURRENT": {
        "type": "float",
        "range": [0, 100]
    }
}

EPCDifferenceRecordValidationConfiguration = {
}

EPCDifferenceRecordFixedDataValidationConfiguration = {
    "PROPERTY_TYPE": {
        "type": "string",
        "acceptable_values": ["House", "Flat", "Bungalow", "Maisonette", "Park home", "Other"]
    },
    "BUILT_FORM": {
        "type": "string",
        "acceptable_values": ["Detached", "Semi-Detached", "End-Terrace", "Mid-Terrace", "Enclosed Mid-Terrace", "Enclosed End-Terrace", "Enclosed Detached", "Not applicable"]
    },
    "CONSITUENCY": {
        "type": "string",
        "acceptable_values": ["England", "Wales", "Scotland", "Northern Ireland"]
    },
    "NUMBER_HABITABLE_ROOMS": {
        "type": "integer",
        "range": [0, 100]
    },
    "NUMBER_HEATED_ROOMS": {
        "type": "integer",
        "range": [0, 100]
    },
    "FIXED_LIGHTING_OUTLETS_COUNT": {
        "type": "integer",
        "range": [0, 100]
    },
    "CONSTRUCTION_AGE_BAND": {
        "type": "string",
        "acceptable_values": []
    }
}

DatasetValidationConfiguration = {
    
}