"""
Class object for AlkoAlko
Documentation: https://github.com/jonkristian/pyalko

Generated by generator/generator.py - 2021-07-05 19:30:20.823243
"""
from .base import AlkoBase, AlkoBaseClient


class Thingattributes(AlkoBase):
    @property
    def articleNumber(self):
        return self.attributes.get("articleNumber", "")

    @property
    def firmwareMain(self):
        return self.attributes.get("firmwareMain", "")

    @property
    def firmwareMainLocalization(self):
        return self.attributes.get("firmwareMainLocalization", "")

    @property
    def firmwareWifi(self):
        return self.attributes.get("firmwareWifi", "")

    @property
    def firmwareWifiDriver(self):
        return self.attributes.get("firmwareWifiDriver", "")

    @property
    def fotaMode(self):
        return self.attributes.get("fotaMode", "")

    @property
    def hardwareVersionMain(self):
        return self.attributes.get("hardwareVersionMain", "")

    @property
    def hardwareVersionWifi(self):
        return self.attributes.get("hardwareVersionWifi", "")

    @property
    def serialNumberMain(self):
        return self.attributes.get("serialNumberMain", "")

    @property
    def serialNumberWifi(self):
        return self.attributes.get("serialNumberWifi", "")

    @property
    def thingModel(self):
        return self.attributes.get("thingModel", "")

    @property
    def thingName(self):
        return self.attributes.get("thingName", "")

    @property
    def thingType(self):
        return self.attributes.get("thingType", "")


class Accessinformation(AlkoBase):
    @property
    def accessAdmin(self):
        return self.attributes.get("accessAdmin", True)

    @property
    def thingName(self):
        return self.attributes.get("thingName", "")

    @property
    def userEmail(self):
        return self.attributes.get("userEmail", "")

    @property
    def accessId(self):
        return self.attributes.get("accessId", "")

    @property
    def accessAlias(self):
        return self.attributes.get("accessAlias", "")

    @property
    def userId(self):
        return self.attributes.get("userId", "")

    @property
    def accessCreated(self):
        return self.attributes.get("accessCreated", "")


class Accesses(AlkoBase):
    @property
    def accessAdmin(self):
        return self.attributes.get("accessAdmin", True)

    @property
    def thingName(self):
        return self.attributes.get("thingName", "")

    @property
    def userEmail(self):
        return self.attributes.get("userEmail", "")

    @property
    def accessId(self):
        return self.attributes.get("accessId", "")

    @property
    def accessAlias(self):
        return self.attributes.get("accessAlias", "")

    @property
    def userId(self):
        return self.attributes.get("userId", "")

    @property
    def accessCreated(self):
        return self.attributes.get("accessCreated", "")


class ThingstateStateReportedOperationerror(AlkoBase):
    @property
    def code(self):
        return self.attributes.get("code", None)

    @property
    def type(self):
        return self.attributes.get("type", "")

    @property
    def description(self):
        return self.attributes.get("description", "")


class ThingstateStateReportedLanguagesettings(AlkoBase):
    @property
    def selected(self):
        return self.attributes.get("selected", "")

    @property
    def supported(self):
        return self.attributes.get("supported", [])


class ThingstateStateReportedMowingwindowsMondayWindow1(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsMondayWindow2(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", True)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsMonday(AlkoBase):
    @property
    def window_1(self):
        return ThingstateStateReportedMowingwindowsMondayWindow1(
            self.attributes.get("window_1", {})
        )

    @property
    def window_2(self):
        return ThingstateStateReportedMowingwindowsMondayWindow2(
            self.attributes.get("window_2", {})
        )


class ThingstateStateReportedMowingwindowsTuesdayWindow1(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsTuesdayWindow2(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", False)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsTuesday(AlkoBase):
    @property
    def window_1(self):
        return ThingstateStateReportedMowingwindowsTuesdayWindow1(
            self.attributes.get("window_1", {})
        )

    @property
    def window_2(self):
        return ThingstateStateReportedMowingwindowsTuesdayWindow2(
            self.attributes.get("window_2", {})
        )


class ThingstateStateReportedMowingwindowsWednesdayWindow1(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsWednesdayWindow2(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", True)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsWednesday(AlkoBase):
    @property
    def window_1(self):
        return ThingstateStateReportedMowingwindowsWednesdayWindow1(
            self.attributes.get("window_1", {})
        )

    @property
    def window_2(self):
        return ThingstateStateReportedMowingwindowsWednesdayWindow2(
            self.attributes.get("window_2", {})
        )


class ThingstateStateReportedMowingwindowsThursdayWindow1(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsThursdayWindow2(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", False)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsThursday(AlkoBase):
    @property
    def window_1(self):
        return ThingstateStateReportedMowingwindowsThursdayWindow1(
            self.attributes.get("window_1", {})
        )

    @property
    def window_2(self):
        return ThingstateStateReportedMowingwindowsThursdayWindow2(
            self.attributes.get("window_2", {})
        )


class ThingstateStateReportedMowingwindowsFridayWindow1(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsFridayWindow2(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsFriday(AlkoBase):
    @property
    def window_1(self):
        return ThingstateStateReportedMowingwindowsFridayWindow1(
            self.attributes.get("window_1", {})
        )

    @property
    def window_2(self):
        return ThingstateStateReportedMowingwindowsFridayWindow2(
            self.attributes.get("window_2", {})
        )


class ThingstateStateReportedMowingwindowsSaturdayWindow1(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", True)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsSaturdayWindow2(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", False)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsSaturday(AlkoBase):
    @property
    def window_1(self):
        return ThingstateStateReportedMowingwindowsSaturdayWindow1(
            self.attributes.get("window_1", {})
        )

    @property
    def window_2(self):
        return ThingstateStateReportedMowingwindowsSaturdayWindow2(
            self.attributes.get("window_2", {})
        )


class ThingstateStateReportedMowingwindowsSundayWindow1(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", False)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsSundayWindow2(AlkoBase):
    @property
    def activityMode(self):
        return self.attributes.get("activityMode", False)

    @property
    def marginMode(self):
        return self.attributes.get("marginMode", False)

    @property
    def startHour(self):
        return self.attributes.get("startHour", None)

    @property
    def startMinute(self):
        return self.attributes.get("startMinute", None)

    @property
    def duration(self):
        return self.attributes.get("duration", None)

    @property
    def entryPoint(self):
        return self.attributes.get("entryPoint", None)


class ThingstateStateReportedMowingwindowsSunday(AlkoBase):
    @property
    def window_1(self):
        return ThingstateStateReportedMowingwindowsSundayWindow1(
            self.attributes.get("window_1", {})
        )

    @property
    def window_2(self):
        return ThingstateStateReportedMowingwindowsSundayWindow2(
            self.attributes.get("window_2", {})
        )


class ThingstateStateReportedMowingwindows(AlkoBase):
    @property
    def monday(self):
        return ThingstateStateReportedMowingwindowsMonday(
            self.attributes.get("monday", {})
        )

    @property
    def tuesday(self):
        return ThingstateStateReportedMowingwindowsTuesday(
            self.attributes.get("tuesday", {})
        )

    @property
    def wednesday(self):
        return ThingstateStateReportedMowingwindowsWednesday(
            self.attributes.get("wednesday", {})
        )

    @property
    def thursday(self):
        return ThingstateStateReportedMowingwindowsThursday(
            self.attributes.get("thursday", {})
        )

    @property
    def friday(self):
        return ThingstateStateReportedMowingwindowsFriday(
            self.attributes.get("friday", {})
        )

    @property
    def saturday(self):
        return ThingstateStateReportedMowingwindowsSaturday(
            self.attributes.get("saturday", {})
        )

    @property
    def sunday(self):
        return ThingstateStateReportedMowingwindowsSunday(
            self.attributes.get("sunday", {})
        )


class ThingstateStateReportedSituationflags(AlkoBase):
    @property
    def operationPermitted(self):
        return self.attributes.get("operationPermitted", True)

    @property
    def batteryWeak(self):
        return self.attributes.get("batteryWeak", False)

    @property
    def batteryFailure(self):
        return self.attributes.get("batteryFailure", False)

    @property
    def batteryWeakSticky(self):
        return self.attributes.get("batteryWeakSticky", False)

    @property
    def mowingWindow(self):
        return self.attributes.get("mowingWindow", True)

    @property
    def marginMowingCompleted(self):
        return self.attributes.get("marginMowingCompleted", False)

    @property
    def userInteraction(self):
        return self.attributes.get("userInteraction", False)

    @property
    def loopSignalValid(self):
        return self.attributes.get("loopSignalValid", True)

    @property
    def chargerContact(self):
        return self.attributes.get("chargerContact", False)

    @property
    def chargerActive(self):
        return self.attributes.get("chargerActive", False)

    @property
    def chargerAllowsRestart(self):
        return self.attributes.get("chargerAllowsRestart", False)

    @property
    def chargerFailure(self):
        return self.attributes.get("chargerFailure", False)

    @property
    def manualOperation(self):
        return self.attributes.get("manualOperation", False)

    @property
    def robotIsActive(self):
        return self.attributes.get("robotIsActive", True)

    @property
    def issueDisplay(self):
        return self.attributes.get("issueDisplay", False)

    @property
    def homingTriggerSchedule(self):
        return self.attributes.get("homingTriggerSchedule", False)

    @property
    def homingTriggerBatteryWaek(self):
        return self.attributes.get("homingTriggerBatteryWaek", False)

    @property
    def homingTriggerUserRequest(self):
        return self.attributes.get("homingTriggerUserRequest", False)

    @property
    def homingTriggerRain(self):
        return self.attributes.get("homingTriggerRain", False)

    @property
    def homingTriggerTemperature(self):
        return self.attributes.get("homingTriggerTemperature", False)

    @property
    def homingTriggerMowingUnitOverload(self):
        return self.attributes.get("homingTriggerMowingUnitOverload", False)

    @property
    def homingTriggerRestart(self):
        return self.attributes.get("homingTriggerRestart", False)

    @property
    def dayCancelled(self):
        return self.attributes.get("dayCancelled", False)

    @property
    def rainDetected(self):
        return self.attributes.get("rainDetected", False)

    @property
    def rainAllowsMowing(self):
        return self.attributes.get("rainAllowsMowing", True)

    @property
    def temperatureMonitoringActive(self):
        return self.attributes.get("temperatureMonitoringActive", True)

    @property
    def temperatureAllowsMowing(self):
        return self.attributes.get("temperatureAllowsMowing", True)

    @property
    def temperatureAllowsHoming(self):
        return self.attributes.get("temperatureAllowsHoming", True)

    @property
    def temperatureAllowsCharging(self):
        return self.attributes.get("temperatureAllowsCharging", True)

    @property
    def wheelMotorTemperatureHigh(self):
        return self.attributes.get("wheelMotorTemperatureHigh", False)

    @property
    def stopAfterIssue(self):
        return self.attributes.get("stopAfterIssue", False)

    @property
    def bladeService(self):
        return self.attributes.get("bladeService", True)


class ThingstateStateReported(AlkoBase):
    @property
    def isConnected(self):
        return self.attributes.get("isConnected", True)

    @property
    def rssi(self):
        return self.attributes.get("rssi", None)

    @property
    def batteryLevel(self):
        return self.attributes.get("batteryLevel", None)

    @property
    def operationState(self):
        return self.attributes.get("operationState", "")

    @property
    def operationSubState(self):
        return self.attributes.get("operationSubState", "")

    @property
    def operationSituation(self):
        return self.attributes.get("operationSituation", "")

    @property
    def operationError(self):
        return ThingstateStateReportedOperationerror(
            self.attributes.get("operationError", {})
        )

    @property
    def nextOperation(self):
        return self.attributes.get("nextOperation", None)

    @property
    def remainingDuration(self):
        return self.attributes.get("remainingDuration", None)

    @property
    def operationTimeTotal(self):
        return self.attributes.get("operationTimeTotal", None)

    @property
    def operationTimeMowing(self):
        return self.attributes.get("operationTimeMowing", None)

    @property
    def operationTimeWheelMotorLeft(self):
        return self.attributes.get("operationTimeWheelMotorLeft", None)

    @property
    def operationTimeWheelMotorRight(self):
        return self.attributes.get("operationTimeWheelMotorRight", None)

    @property
    def operationTimeBlade(self):
        return self.attributes.get("operationTimeBlade", None)

    @property
    def mowingCycles(self):
        return self.attributes.get("mowingCycles", None)

    @property
    def chargingCycles(self):
        return self.attributes.get("chargingCycles", None)

    @property
    def remainingBladeLifetime(self):
        return self.attributes.get("remainingBladeLifetime", None)

    @property
    def rtc(self):
        return self.attributes.get("rtc", "")

    @property
    def languageSettings(self):
        return ThingstateStateReportedLanguagesettings(
            self.attributes.get("languageSettings", {})
        )

    @property
    def chargingCurrent(self):
        return self.attributes.get("chargingCurrent", None)

    @property
    def tiltSlope(self):
        return self.attributes.get("tiltSlope", None)

    @property
    def entryPoints(self):
        return self.attributes.get("entryPoints", [])

    @property
    def rainSensor(self):
        return self.attributes.get("rainSensor", True)

    @property
    def rainDelay(self):
        return self.attributes.get("rainDelay", None)

    @property
    def ecoMode(self):
        return self.attributes.get("ecoMode", False)

    @property
    def boundaryOverlap(self):
        return self.attributes.get("boundaryOverlap", None)

    @property
    def mowingWindows(self):
        return ThingstateStateReportedMowingwindows(
            self.attributes.get("mowingWindows", {})
        )

    @property
    def situationFlags(self):
        return ThingstateStateReportedSituationflags(
            self.attributes.get("situationFlags", {})
        )


class ThingstateState(AlkoBase):
    @property
    def reported(self):
        return ThingstateStateReported(self.attributes.get("reported", {}))


class Thingstate(AlkoBase):
    @property
    def state(self):
        return ThingstateState(self.attributes.get("state", {}))

    @property
    def version(self):
        return self.attributes.get("version", None)

    @property
    def timestamp(self):
        return self.attributes.get("timestamp", None)


class Additionaldocuments(AlkoBase):
    @property
    def docname(self):
        return self.attributes.get("docname", "")

    @property
    def doctype(self):
        return self.attributes.get("doctype", "")

    @property
    def version(self):
        return self.attributes.get("version", "")

    @property
    def fullpath(self):
        return self.attributes.get("fullpath", "")


class Brand(AlkoBase):
    @property
    def name(self):
        return self.attributes.get("name", "")


class Pim(AlkoBase):
    @property
    def articleNumber(self):
        return self.attributes.get("articleNumber", "")

    @property
    def ean(self):
        return self.attributes.get("ean", "")

    @property
    def name(self):
        return self.attributes.get("name", "")

    @property
    def additionalDocuments(self):
        return [
            Additionaldocuments(x)
            for x in self.attributes.get("additionalDocuments", [])
        ]

    @property
    def brand(self):
        return [Brand(x) for x in self.attributes.get("brand", [])]

    @property
    def images(self):
        return self.attributes.get("images", [])


class AlkoDevice(AlkoBaseClient):
    @property
    def thingName(self):
        return self.attributes.get("thingName", "")

    @property
    def thingType(self):
        return self.attributes.get("thingType", "")

    @property
    def thingAttributes(self):
        return Thingattributes(self.attributes.get("thingAttributes", {}))

    @property
    def accessInformation(self):
        return Accessinformation(self.attributes.get("accessInformation", {}))

    @property
    def accesses(self):
        return [Accesses(x) for x in self.attributes.get("accesses", [])]

    @property
    def thingState(self):
        return Thingstate(self.attributes.get("thingState", {}))

    @property
    def pim(self):
        return Pim(self.attributes.get("pim", {}))
