{% import "helpers/code.html.nunj" as codeMacro %}
{% import "helpers/type.html.nunj" as typeMacro %}
{% import "helpers/declaration-modifiers.html.nunj" as tagsMacro %}
{% import "helpers/parameters.html.nunj" as parametersMacro %}
{% import "helpers/decorators.html.nunj" as decoratorsMacro %}
{% import "helpers/no-content.html.nunj" as noContentMacro %}
{% import "helpers/modifier.html.nunj" as modifierMacro %}
{% import "helpers/status.html.nunj" as statusMacro %}

{% macro render(accessor, origin) %}
    {% macro renderAccessor(accessor, type, origin) %}
        {% set parameters = accessor.getParameters() %}
        {% set accessorChain = accessor | getAccessorChain %}
        {% set inheritedFrom = accessor | getInheritedParent(origin) %}
        {% set overriddenMember = accessor | getOverriddenMember %}
        {% set implementedMember = accessor | getImplementedMember %}
        {% set docNode = accessorChain | firstNodeWithComment %}

        <table class="{{ statusMacro.class(accessor) }}">
            <thead>
            <tr>
                <th indexable="false">
                    {{ decoratorsMacro.render(accessor.getDecorators()) if accessor.getDecorators }}
                    {{ tagsMacro.render(accessor, 'modifier') }}
                    <h3 dataSlug="{{ type + '-' + accessor.getName() }}" dataSlugType="member"
                        dataSlugTitle="{{ accessor.getName() }}">
                        {{ modifierMacro.render(type) }} {{ accessor.getName() }}
                    </h3>
                    <div class="ng-doc-node-details">
                        {%- if inheritedFrom %}
                            inherited from <code>{{ inheritedFrom.getName() }}</code>
                        {%- elseif overriddenMember %}
                            overrides <code>{{ overriddenMember.getParent().getName() }}</code>
                        {%- elseif implementedMember %}
                            implements <code>{{ implementedMember.getParent().getName() }}</code>
                        {%- endif %}
                    </div>
                </th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td>
                    <div class="ng-doc-api-status">
                        {{ statusMacro.render(accessor) }}
                    </div>

                    {% set description = docNode | getJsDocDescription %}

                    {{ description if description else noContentMacro.render('No documentation has been provided.') }}

                    {% include "parts/member-remarks.html.nunj" %}
                </td>
            </tr>
            <tr>
                <td indexable="false">
                    <h5 class="no-anchor ng-doc-secondary-heading">Presentation</h5>
                    {{ codeMacro.render(accessor | accessorPresentation, "typescript", false) }}
                </td>
            </tr>
            <tr>
                <td indexable="false">
                    <h5 class="no-anchor ng-doc-secondary-heading">Type</h5>
                    <p>
                        {{ typeMacro.type(accessor) }}
                    </p>
                </td>
            </tr>
            </tbody>
        </table>
    {% endmacro %}


    {{ renderAccessor(accessor.get, "get", origin) if accessor.get }}
    {{ renderAccessor(accessor.set, "set", origin) if accessor.set }}
{% endmacro %}
