{%- set PORT_ALL = [] %}
{%- for port in PORT %}
    {%- if PORT_ALL.append(port) %}{% endif %}
{%- endfor %}
{%- if PORT_ALL | sort_by_port_index %}{% endif %}

{%- set port_names_list_all = [] %}
{%- for port in PORT_ALL %}
    {%- if port_names_list_all.append(port) %}{% endif %}
{%- endfor %}
{%- set port_names_all = port_names_list_all | join(',') -%}


{%- set PORT_ACTIVE = [] %}
{%- if DEVICE_NEIGHBOR is not defined %}
    {%- set PORT_ACTIVE = PORT_ALL %}
{%- else %}
    {%- for port in DEVICE_NEIGHBOR.keys() %}
        {%- if PORT_ACTIVE.append(port) %}{%- endif %}
    {%- endfor %}
{%- endif %}
{%- if PORT_ACTIVE | sort_by_port_index %}{% endif %}

{%- set port_names_list_active = [] %}
{%- for port in PORT_ACTIVE %}
    {%- if port_names_list_active.append(port) %}{%- endif %}
{%- endfor %}
{%- set port_names_active = port_names_list_active | join(',') -%}


{%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot', 'marvell'] -%}
{%- set backend_device_types = ['BackEndToRRouter', 'BackEndLeafRouter'] -%}


{
{% if generate_tc_to_pg_map is defined %}
    {{- generate_tc_to_pg_map() }}
{% else %}
    "TC_TO_PRIORITY_GROUP_MAP": {
        "AZURE": {
            "0": "0",
            "1": "0",
            "2": "0",
            "3": "3",
            "4": "4",
            "5": "0",
            "6": "0",
            "7": "7"
        }
    },
{% endif %}
    "MAP_PFC_PRIORITY_TO_QUEUE": {
        "AZURE": {
            "0": "0",
            "1": "1",
            "2": "2",
            "3": "3",
            "4": "4",
            "5": "5",
            "6": "6",
            "7": "7"
        }
    },
    "TC_TO_QUEUE_MAP": {
        "AZURE": {
            "0": "0",
            "1": "1",
            "2": "2",
            "3": "3",
            "4": "4",
            "5": "5",
            "6": "6",
            "7": "7"
        }
    },
{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] in backend_device_types and 'storage_device' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['storage_device'] == 'true' %}
    "DOT1P_TO_TC_MAP": {
        "AZURE": {
            "0": "1",
            "1": "0",
            "2": "2",
            "3": "3",
            "4": "4",
            "5": "5",
            "6": "6",
            "7": "7"
        }
    },
{% else %}
    "DSCP_TO_TC_MAP": {
        "AZURE": {
            "0" : "1",
            "1" : "1",
            "2" : "1",
            "3" : "3",
            "4" : "4",
            "5" : "2",
            "6" : "1",
            "7" : "1",
            "8" : "0",
            "9" : "1",
            "10": "1",
            "11": "1",
            "12": "1",
            "13": "1",
            "14": "1",
            "15": "1",
            "16": "1",
            "17": "1",
            "18": "1",
            "19": "1",
            "20": "1",
            "21": "1",
            "22": "1",
            "23": "1",
            "24": "1",
            "25": "1",
            "26": "1",
            "27": "1",
            "28": "1",
            "29": "1",
            "30": "1",
            "31": "1",
            "32": "1",
            "33": "1",
            "34": "1",
            "35": "1",
            "36": "1",
            "37": "1",
            "38": "1",
            "39": "1",
            "40": "1",
            "41": "1",
            "42": "1",
            "43": "1",
            "44": "1",
            "45": "1",
            "46": "5",
            "47": "1",
            "48": "6",
            "49": "1",
            "50": "1",
            "51": "1",
            "52": "1",
            "53": "1",
            "54": "1",
            "55": "1",
            "56": "1",
            "57": "1",
            "58": "1",
            "59": "1",
            "60": "1",
            "61": "1",
            "62": "1",
            "63": "1"
        }
    },
{% endif %}
    "SCHEDULER": {
        "scheduler.0": {
            "type"  : "DWRR",
            "weight": "14"
        },
        "scheduler.1": {
            "type"  : "DWRR",
            "weight": "15"
        }
    },
{% if asic_type in pfc_to_pg_map_supported_asics  %}
    "PFC_PRIORITY_TO_PRIORITY_GROUP_MAP": {
        "AZURE": {
            "3": "3",
            "4": "4"
        }
    },
{% endif %}
    "PORT_QOS_MAP": {
{% for port in PORT_ACTIVE %}
        "{{ port }}": {
{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] in backend_device_types and 'storage_device' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['storage_device'] == 'true' %}
            "dot1p_to_tc_map" : "[DOT1P_TO_TC_MAP|AZURE]",
{% else %}
            "dscp_to_tc_map"  : "[DSCP_TO_TC_MAP|AZURE]",
{% endif %}
            "tc_to_queue_map" : "[TC_TO_QUEUE_MAP|AZURE]",
            "tc_to_pg_map"    : "[TC_TO_PRIORITY_GROUP_MAP|AZURE]",
            "pfc_to_queue_map": "[MAP_PFC_PRIORITY_TO_QUEUE|AZURE]",
{% if asic_type in pfc_to_pg_map_supported_asics %}
            "pfc_to_pg_map"   : "[PFC_PRIORITY_TO_PRIORITY_GROUP_MAP|AZURE]",
{% endif %}
            "pfc_enable"      : "3,4"
        }{% if not loop.last %},{% endif %}

{% endfor %}
    },
{% if generate_wred_profiles is defined %}
    {{- generate_wred_profiles() }}
{% else %}
    "WRED_PROFILE": {
        "AZURE_LOSSLESS" : {
            "wred_green_enable"      : "true",
            "wred_yellow_enable"     : "true",
            "wred_red_enable"        : "true",
            "ecn"                    : "ecn_all",
            "green_max_threshold"    : "2097152",
            "green_min_threshold"    : "1048576",
            "yellow_max_threshold"   : "2097152",
            "yellow_min_threshold"   : "1048576",
            "red_max_threshold"      : "2097152",
            "red_min_threshold"      : "1048576",
            "green_drop_probability" : "5",
            "yellow_drop_probability": "5",
            "red_drop_probability"   : "5"
        }
    },
{% endif %}
    "QUEUE": {
{% for port in PORT_ACTIVE %}
        "{{ port }}|3": {
            "scheduler"   : "[SCHEDULER|scheduler.1]",
            "wred_profile": "[WRED_PROFILE|AZURE_LOSSLESS]"
        },
{% endfor %}
{% for port in PORT_ACTIVE %}
        "{{ port }}|4": {
            "scheduler"   : "[SCHEDULER|scheduler.1]",
            "wred_profile": "[WRED_PROFILE|AZURE_LOSSLESS]"
        },
{% endfor %}
{% for port in PORT_ACTIVE %}
        "{{ port }}|0": {
            "scheduler": "[SCHEDULER|scheduler.0]"
        },
{% endfor %}
{% for port in PORT_ACTIVE %}
        "{{ port }}|1": {
            "scheduler": "[SCHEDULER|scheduler.0]"
        },
{% endfor %}
{% for port in PORT_ACTIVE %}
        "{{ port }}|2": {
            "scheduler": "[SCHEDULER|scheduler.0]"
        },
{% endfor %}
{% for port in PORT_ACTIVE %}
        "{{ port }}|5": {
            "scheduler": "[SCHEDULER|scheduler.0]"
        },
{% endfor %}
{% for port in PORT_ACTIVE %}
        "{{ port }}|6": {
            "scheduler": "[SCHEDULER|scheduler.0]"
        }{% if not loop.last %},{% endif %}

{% endfor %}
    }
}