{%- macro modelClass(name, properties, required, indentLevel) %}
{%- set className = name | upperFirst %}
{% set indent1 = indentLevel | indent1 -%}
{% set indent2 = indentLevel | indent2 -%}
{% set indent3 = indentLevel | indent3 -%}
{% set indent4 = indentLevel | indent4 -%}

{{ indent1 }}class {{ name | upperFirst }}(Entity):
{% for name, prop in properties -%}
{%- set typeInfo = [name, prop] | getTypeInfo -%}
{%- if typeInfo.recursive -%}
{{ modelClass(typeInfo.innerType, typeInfo.properties, prop.required(), indentLevel+1) }}
{%- elif typeInfo.generalType === 'enum' %}
{{ indent2 }}class {{ typeInfo.type }}(str, Enum):
{% for v in typeInfo.enum -%}
{{ indent3 }}{{ v }} = '{{ v}}'
{% endfor -%}
{%- endif %}
{%- endfor %}
{{ indent2 }}def __init__(
{{ indent4 }}self
{%- for name, prop in properties -%}
{%- set typeInfo = [name, prop] | getTypeInfo -%}
,
{{ indent4 }}{{ typeInfo.pythonName }}{{ ": " + typeInfo.pythonType if typeInfo.pythonType else "" }}
{%- endfor -%}
):
{%- for name, prop in properties -%}
{%- set typeInfo = [name, prop] | getTypeInfo %}
{{ indent3 }}self.{{ typeInfo.pythonName }} = {{ typeInfo.pythonName }}
{%- else %}
{{ indent3 }}pass
{%- endfor %}

{% endmacro -%}
