<%
BKSL = "\\"

networks = list(supported_on("trezor1", eth))
max_chain_id_length = 0
max_slip44_length = 0
max_suffix_length = 0
for n in networks:
	max_chain_id_length = max(len(str(n.chain_id)), max_chain_id_length)
	max_slip44_length = max(len(str(n.slip44)), max_slip44_length)
	max_suffix_length = max(len(n.shortcut), max_suffix_length)

def align_chain_id(n):
	return "{:>{w}}".format(n.chain_id, w=max_chain_id_length)

def align_slip44(n):
	return "{:>{w}}".format(n.slip44, w=max_slip44_length)

def align_suffix(n):
	cstr = c_str(" " + n.shortcut) + ";"
	# we add two quotes, a space and a semicolon. hence +4 chars
	return "{:<{w}}".format(cstr, w=max_suffix_length + 4)

%>\
// This file is automatically generated from ethereum_networks.h.mako
// DO NOT EDIT

#ifndef __ETHEREUM_NETWORKS_H__
#define __ETHEREUM_NETWORKS_H__

#define SLIP44_UNKNOWN UINT32_MAX

#define ASSIGN_ETHEREUM_SUFFIX(suffix, chain_id) ${BKSL}
  switch (chain_id) { ${BKSL}
% for n in networks:
    case ${align_chain_id(n)}: suffix = ${align_suffix(n)} break;  /* ${n.name} */ ${BKSL}
% endfor
    default: suffix = " UNKN"; break;  /* unknown chain */ ${BKSL}
  }

static bool is_ethereum_slip44(uint32_t slip44) {
  switch (slip44) {
% for slip44 in sorted(set(n.slip44 for n in networks)):
    case ${slip44}:
% endfor
      return true;
    default:
      return false;
  }
}

static int32_t ethereum_slip44_by_chain_id(uint64_t chain_id) {
  switch (chain_id) {
% for n in networks:
    case ${align_chain_id(n)}: return ${align_slip44(n)};  /* ${n.name} */
% endfor
    default: return SLIP44_UNKNOWN;  /* unknown chain */
  }
}

#endif