# SPDX-FileCopyrightText: 2020 The Magma Authors.
# SPDX-FileCopyrightText: 2022 Open Networking Foundation <support@opennetworking.org>
#
# SPDX-License-Identifier: BSD-3-Clause

from spyne.model import ComplexModel
from spyne.model.complex import XmlAttribute, XmlData
from spyne.model.primitive import (
    Boolean,
    DateTime,
    Integer,
    String,
    UnsignedInteger,
)
from spyne.util.odict import odict

# Namespaces
XSI_NS = 'http://www.w3.org/2001/XMLSchema-instance'
SOAP_ENV = 'http://schemas.xmlsoap.org/soap/envelope/'
SOAP_ENC = 'http://schemas.xmlsoap.org/soap/encoding/'
CWMP_NS = 'urn:dslforum-org:cwmp-1-0'


class Tr069ComplexModel(ComplexModel):
    """ Base class for TR-069 models, to set common attributes. Does not appear
        in CWMP XSD file. """
    __namespace__ = CWMP_NS


class anySimpleType(Tr069ComplexModel):
    """ Type used to transfer simple data of various types. Data type is
        defined in 'type' XML attribute. Data is handled as a string. """
    _type_info = odict()
    _type_info["type"] = XmlAttribute(String, ns=XSI_NS)
    _type_info["Data"] = XmlData(String)

    def __repr__(self):
        """For types we can't resolve only print the datum"""
        return self.Data


# SOAP Header Elements


class ID(Tr069ComplexModel):
    # Note: for some reason, XmlAttribute/XmlData pairs MUST be ordered, with
    # XmlAttribute coming first. This appears to be a spyne bug (something to do
    # with spyne.interface._base.add_class())
    _type_info = odict()
    _type_info["mustUnderstand"] = XmlAttribute(String, ns=SOAP_ENV)
    _type_info["Data"] = XmlData(String)


class HoldRequests(Tr069ComplexModel):
    _type_info = odict()
    _type_info["mustUnderstand"] = XmlAttribute(String, ns=SOAP_ENV)
    _type_info["Data"] = XmlData(Boolean)


# SOAP Fault Extensions


class SetParameterValuesFault(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterName"] = String
    _type_info["FaultCode"] = UnsignedInteger
    _type_info["FaultString"] = String


class Fault(Tr069ComplexModel):
    _type_info = odict()
    _type_info["FaultCode"] = UnsignedInteger
    _type_info["FaultString"] = String
    _type_info["SetParameterValuesFault"] = SetParameterValuesFault.customize(
        max_occurs='unbounded',
    )


# Type definitions used in messages


class MethodList(Tr069ComplexModel):
    _type_info = odict()
    _type_info["string"] = String(max_length=64, max_occurs='unbounded')
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)


class FaultStruct(Tr069ComplexModel):
    _type_info = odict()
    _type_info["FaultCode"] = Integer
    _type_info["FaultString"] = String(max_length=256)


class DeviceIdStruct(Tr069ComplexModel):
    _type_info = odict()
    _type_info["Manufacturer"] = String(max_length=64)
    _type_info["OUI"] = String(length=6)
    _type_info["ProductClass"] = String(max_length=64)
    _type_info["SerialNumber"] = String(max_length=64)


class EventStruct(Tr069ComplexModel):
    _type_info = odict()
    _type_info["EventCode"] = String(max_length=64)
    _type_info["CommandKey"] = String(max_length=32)


class EventList(Tr069ComplexModel):
    _type_info = odict()
    _type_info["EventStruct"] = EventStruct.customize(max_occurs='unbounded')
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)


class ParameterValueStruct(Tr069ComplexModel):
    _type_info = odict()
    _type_info["Name"] = String
    _type_info["Value"] = anySimpleType


class ParameterValueList(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterValueStruct"] = ParameterValueStruct.customize(
        max_occurs='unbounded',
    )
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)


class ParameterInfoStruct(Tr069ComplexModel):
    _type_info = odict()
    _type_info["Name"] = String(max_length=256)
    _type_info["Writable"] = Boolean


class ParameterInfoList(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterInfoStruct"] = ParameterInfoStruct.customize(max_occurs='unbounded')
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)


class ParameterNames(Tr069ComplexModel):
    _type_info = odict()
    _type_info["string"] = String.customize(max_occurs='unbounded', max_length=256)
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)


class ParameterKeyType(anySimpleType):
    pass


class AccessList(Tr069ComplexModel):
    _type_info = odict()
    _type_info["string"] = String.customize(max_occurs='unbounded', max_length=64)
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)


class SetParameterAttributesStruct(Tr069ComplexModel):
    _type_info = odict()
    _type_info["Name"] = String(max_length=256)
    _type_info["NotificationChange"] = Boolean
    _type_info["Notification"] = Integer
    _type_info["AccessListChange"] = Boolean
    _type_info["AccessList"] = AccessList


class SetParameterAttributesList(Tr069ComplexModel):
    _type_info = odict()
    _type_info["SetParameterAttributesStruct"] = SetParameterAttributesStruct.customize(
        max_occurs='unbounded',
    )
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)


class ParameterAttributeStruct(Tr069ComplexModel):
    _type_info = odict()
    _type_info["Name"] = String(max_length=256)
    _type_info["Notification"] = Integer
    _type_info["AccessList"] = AccessList


class ParameterAttributeList(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterValueStruct"] = ParameterAttributeStruct.customize(
        max_occurs='unbounded',
    )
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)


class CommandKeyType(String.customize(max_length=32)):
    pass


class ObjectNameType(String.customize(max_length=256)):
    pass


# CPE messages


class SetParameterValues(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterList"] = ParameterValueList
    _type_info["ParameterKey"] = ParameterKeyType


class SetParameterValuesResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["Status"] = Integer


class GetParameterValues(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterNames"] = ParameterNames


class GetParameterValuesResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterList"] = ParameterValueList


class GetParameterNames(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterPath"] = String.customize(max_length=256)
    _type_info["NextLevel"] = Boolean


class GetParameterNamesResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterList"] = ParameterInfoList


class SetParameterAttributes(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterList"] = SetParameterAttributesList


class SetParameterAttributesResponse(Tr069ComplexModel):
    # Dummy field required because spyne does not allow 'bare' RPC function with
    # no input parameters. This field is never sent by CPE.
    _type_info = odict()
    _type_info["DummyField"] = UnsignedInteger


class GetParameterAttributes(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterNames"] = ParameterNames


class GetParameterAttributesResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ParameterList"] = ParameterAttributeList


class AddObject(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ObjectName"] = ObjectNameType
    _type_info["ParameterKey"] = ParameterKeyType


class AddObjectResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["InstanceNumber"] = UnsignedInteger
    _type_info["Status"] = Integer


class DeleteObject(Tr069ComplexModel):
    _type_info = odict()
    _type_info["ObjectName"] = ObjectNameType
    _type_info["ParameterKey"] = ParameterKeyType


class DeleteObjectResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["Status"] = Integer


class Download(Tr069ComplexModel):
    _type_info = odict()
    _type_info["CommandKey"] = CommandKeyType
    _type_info["FileType"] = String(max_length=64)
    _type_info["URL"] = String(max_length=256)
    _type_info["Username"] = String(max_length=256)
    _type_info["Password"] = String(max_length=256)
    _type_info["FileSize"] = UnsignedInteger
    _type_info["TargetFileName"] = String(max_length=256)
    _type_info["DelaySeconds"] = UnsignedInteger
    _type_info["SuccessURL"] = String(max_length=256)
    _type_info["FailureURL"] = String(max_length=256)


class DownloadResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["Status"] = Integer
    _type_info["StartTime"] = DateTime
    _type_info["CompleteTime"] = DateTime


class Reboot(Tr069ComplexModel):
    _type_info = odict()
    _type_info["CommandKey"] = CommandKeyType


class RebootResponse(Tr069ComplexModel):
    # Dummy field required because spyne does not allow 'bare' RPC function with
    # no input parameters. This field is never sent by CPE.
    _type_info = odict()
    _type_info["DummyField"] = UnsignedInteger


# ACS messages


class Inform(Tr069ComplexModel):
    _type_info = odict()
    _type_info["DeviceId"] = DeviceIdStruct
    _type_info["Event"] = EventList
    _type_info["MaxEnvelopes"] = UnsignedInteger
    _type_info["CurrentTime"] = DateTime
    _type_info["RetryCount"] = UnsignedInteger
    _type_info["ParameterList"] = ParameterValueList


class InformResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["MaxEnvelopes"] = UnsignedInteger


class TransferComplete(Tr069ComplexModel):
    _type_info = odict()
    _type_info["CommandKey"] = CommandKeyType
    _type_info["FaultStruct"] = FaultStruct
    _type_info["StartTime"] = DateTime
    _type_info["CompleteTime"] = DateTime


class TransferCompleteResponse(Tr069ComplexModel):
    # Dummy field required because spyne does not allow 'bare' RPC function with
    # no input parameters. This field is never sent by ACS.
    _type_info = odict()
    _type_info["DummyField"] = UnsignedInteger


class GetRPCMethods(Tr069ComplexModel):
    _type_info = odict()
    _type_info["DummyField"] = UnsignedInteger


class GetRPCMethodsResponse(Tr069ComplexModel):
    _type_info = odict()
    _type_info["MethodList"] = MethodList


#
# Miscellaneous
#

class ParameterListUnion(Tr069ComplexModel):
    """ Union of structures that get instantiated as 'ParameterList' in ACS->CPE
        messages. This is required because AcsToCpeRequests can only have one
        parameter named 'ParameterList', so that must also be a union """
    _type_info = odict()

    # Fields from ParameterValueList
    _type_info["ParameterValueStruct"] = ParameterValueStruct.customize(
        max_occurs='unbounded',
    )
    _type_info["arrayType"] = XmlAttribute(String, ns=SOAP_ENC)

    # Fields from SetParameterAttributesList
    _type_info["SetParameterAttributesStruct"] = \
        SetParameterAttributesStruct.customize(max_occurs='unbounded')
    # arrayType = XmlAttribute(String, ns=SOAP_ENC) - Already covered above


class AcsToCpeRequests(Tr069ComplexModel):
    """ Union of all ACS->CPE requests. Only fields for one request is populated
        per message instance """
    _type_info = odict()

    # Fields for SetParameterValues
    _type_info["ParameterList"] = ParameterListUnion  # See ParameterListUnion for explanation
    _type_info["ParameterKey"] = ParameterKeyType

    # Fields for GetParameterValues
    # _type_info["ParameterList"] = ParameterValueList - Already covered above

    # Fields for GetParameterNames
    _type_info["ParameterPath"] = String.customize(max_length=256)
    _type_info["NextLevel"] = Boolean

    # Fields for SetParameterAttributes
    # _type_info["ParameterList"] = SetParameterAttributesList - Already covered above

    # Fields for GetParameterAttributes
    _type_info["ParameterNames"] = ParameterNames

    # Fields for AddObject
    _type_info["ObjectName"] = ObjectNameType
    _type_info["ParameterKey"] = ParameterKeyType

    # Fields for DeleteObject
    # _type_info["ObjectName"] = ObjectNameType - Already covered above
    # _type_info["ParameterKey"] = ParameterKeyType - Already covered above

    # Fields for Download
    _type_info["CommandKey"] = CommandKeyType
    _type_info["FileType"] = String(max_length=64)
    _type_info["URL"] = String(max_length=256)
    _type_info["Username"] = String(max_length=256)
    _type_info["Password"] = String(max_length=256)
    _type_info["FileSize"] = UnsignedInteger
    _type_info["TargetFileName"] = String(max_length=256)
    _type_info["DelaySeconds"] = UnsignedInteger
    _type_info["SuccessURL"] = String(max_length=256)
    _type_info["FailureURL"] = String(max_length=256)

    # Fields for Reboot
    # _type_info["CommandKey"] = CommandKeyType - Already covered above


class DummyInput(Tr069ComplexModel):
    """ Dummy complex model. Used for 'EmptyHttp' function, because spyne Does
        not handle 'bare' function with no inputs """
    _type_info = odict()
    _type_info["DummyField"] = UnsignedInteger
