"""Z-Wave discovery schemas."""
from . import const

DEFAULT_VALUES_SCHEMA = {
    'power': {
        const.DISC_SCHEMAS: [
            {const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SENSOR_MULTILEVEL],
             const.DISC_INDEX: [const.INDEX_SENSOR_MULTILEVEL_POWER]},
            {const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_METER],
             const.DISC_INDEX: [const.INDEX_METER_POWER]},
            ],
        const.DISC_OPTIONAL: True,
        },
}

DISCOVERY_SCHEMAS = [
    {const.DISC_COMPONENT: 'binary_sensor',
     const.DISC_GENERIC_DEVICE_CLASS: [
         const.GENERIC_TYPE_ENTRY_CONTROL,
         const.GENERIC_TYPE_SENSOR_ALARM,
         const.GENERIC_TYPE_SENSOR_BINARY,
         const.GENERIC_TYPE_SWITCH_BINARY,
         const.GENERIC_TYPE_METER,
         const.GENERIC_TYPE_SENSOR_MULTILEVEL,
         const.GENERIC_TYPE_SWITCH_MULTILEVEL,
         const.GENERIC_TYPE_SENSOR_NOTIFICATION,
         const.GENERIC_TYPE_THERMOSTAT],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SENSOR_BINARY],
             const.DISC_TYPE: const.TYPE_BOOL,
             const.DISC_GENRE: const.GENRE_USER,
         },
         'off_delay': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_CONFIGURATION],
             const.DISC_INDEX: [9],
             const.DISC_OPTIONAL: True,
         }})},
    {const.DISC_COMPONENT: 'climate',
     const.DISC_GENERIC_DEVICE_CLASS: [
         const.GENERIC_TYPE_THERMOSTAT,
         const.GENERIC_TYPE_SENSOR_MULTILEVEL],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [
                 const.COMMAND_CLASS_THERMOSTAT_SETPOINT],
         },
         'temperature': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SENSOR_MULTILEVEL],
             const.DISC_INDEX: [const.INDEX_SENSOR_MULTILEVEL_TEMPERATURE],
             const.DISC_OPTIONAL: True,
         },
         'mode': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_THERMOSTAT_MODE],
             const.DISC_OPTIONAL: True,
         },
         'fan_mode': {
             const.DISC_COMMAND_CLASS: [
                 const.COMMAND_CLASS_THERMOSTAT_FAN_MODE],
             const.DISC_OPTIONAL: True,
         },
         'operating_state': {
             const.DISC_COMMAND_CLASS: [
                 const.COMMAND_CLASS_THERMOSTAT_OPERATING_STATE],
             const.DISC_OPTIONAL: True,
         },
         'fan_state': {
             const.DISC_COMMAND_CLASS: [
                 const.COMMAND_CLASS_THERMOSTAT_FAN_STATE],
             const.DISC_OPTIONAL: True,
         },
         'zxt_120_swing_mode': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_CONFIGURATION],
             const.DISC_INDEX: [33],
             const.DISC_OPTIONAL: True,
         }})},
    {const.DISC_COMPONENT: 'cover',  # Rollershutter
     const.DISC_GENERIC_DEVICE_CLASS: [
         const.GENERIC_TYPE_SWITCH_MULTILEVEL,
         const.GENERIC_TYPE_ENTRY_CONTROL],
     const.DISC_SPECIFIC_DEVICE_CLASS: [
         const.SPECIFIC_TYPE_CLASS_A_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_CLASS_B_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_CLASS_C_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_MOTOR_MULTIPOSITION,
         const.SPECIFIC_TYPE_SECURE_BARRIER_ADDON,
         const.SPECIFIC_TYPE_SECURE_DOOR],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_MULTILEVEL],
             const.DISC_GENRE: const.GENRE_USER,
         },
         'open': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_MULTILEVEL],
             const.DISC_INDEX: [const.INDEX_SWITCH_MULTILEVEL_BRIGHT],
             const.DISC_OPTIONAL: True,
         },
         'close': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_MULTILEVEL],
             const.DISC_INDEX: [const.INDEX_SWITCH_MULTILEVEL_DIM],
             const.DISC_OPTIONAL: True,
         }})},
    {const.DISC_COMPONENT: 'cover',  # Garage Door Switch
     const.DISC_GENERIC_DEVICE_CLASS: [
         const.GENERIC_TYPE_SWITCH_MULTILEVEL,
         const.GENERIC_TYPE_ENTRY_CONTROL],
     const.DISC_SPECIFIC_DEVICE_CLASS: [
         const.SPECIFIC_TYPE_CLASS_A_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_CLASS_B_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_CLASS_C_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_MOTOR_MULTIPOSITION,
         const.SPECIFIC_TYPE_SECURE_BARRIER_ADDON,
         const.SPECIFIC_TYPE_SECURE_DOOR],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_BINARY],
             const.DISC_GENRE: const.GENRE_USER,
         }})},
    {const.DISC_COMPONENT: 'cover',  # Garage Door Barrier
     const.DISC_GENERIC_DEVICE_CLASS: [
         const.GENERIC_TYPE_SWITCH_MULTILEVEL,
         const.GENERIC_TYPE_ENTRY_CONTROL],
     const.DISC_SPECIFIC_DEVICE_CLASS: [
         const.SPECIFIC_TYPE_CLASS_A_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_CLASS_B_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_CLASS_C_MOTOR_CONTROL,
         const.SPECIFIC_TYPE_MOTOR_MULTIPOSITION,
         const.SPECIFIC_TYPE_SECURE_BARRIER_ADDON,
         const.SPECIFIC_TYPE_SECURE_DOOR],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_BARRIER_OPERATOR],
             const.DISC_INDEX: [const.INDEX_BARRIER_OPERATOR_LABEL],
         }})},
    {const.DISC_COMPONENT: 'fan',
     const.DISC_GENERIC_DEVICE_CLASS: [
         const.GENERIC_TYPE_SWITCH_MULTILEVEL],
     const.DISC_SPECIFIC_DEVICE_CLASS: [
         const.SPECIFIC_TYPE_FAN_SWITCH],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_MULTILEVEL],
             const.DISC_INDEX: [const.INDEX_SWITCH_MULTILEVEL_LEVEL],
             const.DISC_TYPE: const.TYPE_BYTE,
         }})},
    {const.DISC_COMPONENT: 'light',
     const.DISC_GENERIC_DEVICE_CLASS: [
         const.GENERIC_TYPE_SWITCH_MULTILEVEL,
         const.GENERIC_TYPE_SWITCH_REMOTE],
     const.DISC_SPECIFIC_DEVICE_CLASS: [
         const.SPECIFIC_TYPE_POWER_SWITCH_MULTILEVEL,
         const.SPECIFIC_TYPE_SCENE_SWITCH_MULTILEVEL,
         const.SPECIFIC_TYPE_NOT_USED],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_MULTILEVEL],
             const.DISC_INDEX: [const.INDEX_SWITCH_MULTILEVEL_LEVEL],
             const.DISC_TYPE: const.TYPE_BYTE,
         },
         'dimming_duration': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_MULTILEVEL],
             const.DISC_INDEX: [const.INDEX_SWITCH_MULTILEVEL_DURATION],
             const.DISC_OPTIONAL: True,
         },
         'color': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_COLOR],
             const.DISC_INDEX: [const.INDEX_SWITCH_COLOR_COLOR],
             const.DISC_OPTIONAL: True,
         },
         'color_channels': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_COLOR],
             const.DISC_INDEX: [const.INDEX_SWITCH_COLOR_CHANNELS],
             const.DISC_OPTIONAL: True,
         }})},
    {const.DISC_COMPONENT: 'lock',
     const.DISC_GENERIC_DEVICE_CLASS: [const.GENERIC_TYPE_ENTRY_CONTROL],
     const.DISC_SPECIFIC_DEVICE_CLASS: [
         const.SPECIFIC_TYPE_DOOR_LOCK,
         const.SPECIFIC_TYPE_ADVANCED_DOOR_LOCK,
         const.SPECIFIC_TYPE_SECURE_KEYPAD_DOOR_LOCK,
         const.SPECIFIC_TYPE_SECURE_LOCKBOX],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_DOOR_LOCK],
             const.DISC_INDEX: [const.INDEX_DOOR_LOCK_LOCK],
         },
         'access_control': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_ALARM],
             const.DISC_INDEX: [const.INDEX_ALARM_ACCESS_CONTROL],
             const.DISC_OPTIONAL: True,
         },
         'alarm_type': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_ALARM],
             const.DISC_INDEX: [const.INDEX_ALARM_TYPE],
             const.DISC_OPTIONAL: True,
         },
         'alarm_level': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_ALARM],
             const.DISC_INDEX: [const.INDEX_ALARM_LEVEL],
             const.DISC_OPTIONAL: True,
         },
         'v2btze_advanced': {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_CONFIGURATION],
             const.DISC_INDEX: [12],
             const.DISC_OPTIONAL: True,
         }})},
    {const.DISC_COMPONENT: 'sensor',
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [
                 const.COMMAND_CLASS_SENSOR_MULTILEVEL,
                 const.COMMAND_CLASS_METER,
                 const.COMMAND_CLASS_ALARM,
                 const.COMMAND_CLASS_SENSOR_ALARM,
                 const.COMMAND_CLASS_INDICATOR],
             const.DISC_GENRE: const.GENRE_USER,
         }})},
    {const.DISC_COMPONENT: 'switch',
     const.DISC_GENERIC_DEVICE_CLASS: [
         const.GENERIC_TYPE_METER,
         const.GENERIC_TYPE_SENSOR_ALARM,
         const.GENERIC_TYPE_SENSOR_BINARY,
         const.GENERIC_TYPE_SWITCH_BINARY,
         const.GENERIC_TYPE_ENTRY_CONTROL,
         const.GENERIC_TYPE_SENSOR_MULTILEVEL,
         const.GENERIC_TYPE_SWITCH_MULTILEVEL,
         const.GENERIC_TYPE_SENSOR_NOTIFICATION,
         const.GENERIC_TYPE_GENERIC_CONTROLLER,
         const.GENERIC_TYPE_SWITCH_REMOTE,
         const.GENERIC_TYPE_REPEATER_SLAVE,
         const.GENERIC_TYPE_THERMOSTAT,
         const.GENERIC_TYPE_WALL_CONTROLLER],
     const.DISC_VALUES: dict(DEFAULT_VALUES_SCHEMA, **{
         const.DISC_PRIMARY: {
             const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_SWITCH_BINARY],
             const.DISC_TYPE: const.TYPE_BOOL,
             const.DISC_GENRE: const.GENRE_USER,
         }})},
]
