package render

import "sort"

// NaturezaJuridicaOption código e descrição oficiais da RFB (tabela NATJU).
type NaturezaJuridicaOption struct {
	Codigo    string
	Descricao string
}

// NaturezaJuridicaOptions lista para o select de busca (ordenada por descrição).
func NaturezaJuridicaOptions() []NaturezaJuridicaOption {
	items := []NaturezaJuridicaOption{
		{"1015", "Órgão Público do Poder Executivo Federal"},
		{"1023", "Órgão Público do Poder Executivo Estadual ou do Distrito Federal"},
		{"1031", "Órgão Público do Poder Executivo Municipal"},
		{"1040", "Órgão Público do Poder Legislativo Federal"},
		{"1058", "Órgão Público do Poder Legislativo Estadual ou do Distrito Federal"},
		{"1066", "Órgão Público do Poder Legislativo Municipal"},
		{"1074", "Órgão Público do Poder Judiciário Federal"},
		{"1082", "Órgão Público do Poder Judiciário Estadual"},
		{"1104", "Autarquia Federal"},
		{"1112", "Autarquia Estadual ou do Distrito Federal"},
		{"1120", "Autarquia Municipal"},
		{"1139", "Fundação Pública de Direito Público Federal"},
		{"1147", "Fundação Pública de Direito Público Estadual ou do Distrito Federal"},
		{"1155", "Fundação Pública de Direito Público Municipal"},
		{"1163", "Órgão Público Autônomo Federal"},
		{"1171", "Órgão Público Autônomo Estadual ou do Distrito Federal"},
		{"1180", "Órgão Público Autônomo Municipal"},
		{"2011", "Empresa Pública"},
		{"2038", "Sociedade de Economia Mista"},
		{"2046", "Sociedade Anônima Aberta"},
		{"2054", "Sociedade Anônima Fechada"},
		{"2062", "Sociedade Empresária Limitada"},
		{"2070", "Sociedade Empresária em Nome Coletivo"},
		{"2089", "Sociedade Empresária em Comandita Simples"},
		{"2097", "Sociedade Empresária em Comandita por Ações"},
		{"2127", "Sociedade em Conta de Participação"},
		{"2135", "Empresário (Individual)"},
		{"2143", "Cooperativa"},
		{"2151", "Consórcio de Sociedades"},
		{"2160", "Grupo de Sociedades"},
		{"2178", "Estabelecimento, no Brasil, de Sociedade Estrangeira"},
		{"2194", "Estabelecimento, no Brasil, de Empresa Binacional Argentino-Brasileira"},
		{"2216", "Empresa Domiciliada no Exterior"},
		{"2232", "Sociedade Simples Pura"},
		{"2240", "Sociedade Simples Limitada"},
		{"2259", "Sociedade Simples em Nome Coletivo"},
		{"2267", "Sociedade Simples em Comandita Simples"},
		{"2275", "Empresa Binacional"},
		{"2283", "Consórcio de Empregadores"},
		{"2291", "Consórcio Simples"},
		{"2305", "Empresa Individual de Responsabilidade Limitada (de Natureza Empresária)"},
		{"2313", "Empresa Individual de Responsabilidade Limitada (de Natureza Simples)"},
		{"2321", "Sociedade Unipessoal de Advocacia"},
		{"2330", "Cooperativas de Consumo"},
		{"2348", "Empresa Simples de Inovação"},
		{"3034", "Serviço Notarial e Registral (Cartório)"},
		{"3069", "Fundação Privada"},
		{"3077", "Serviço Social Autônomo"},
		{"3085", "Condomínio Edilício"},
		{"3100", "Comissão de Conciliação Prévia"},
		{"3118", "Entidade de Mediação e Arbitragem"},
		{"3126", "Partido Político"},
		{"3134", "Entidade Sindical"},
		{"3204", "Estabelecimento, no Brasil, de Fundação ou Associação Estrangeira"},
		{"3212", "Fundação ou Associação Domiciliada no Exterior"},
		{"3220", "Organização Religiosa"},
		{"3239", "Comunidade Indígena"},
		{"3247", "Fundo Privado"},
		{"3255", "Órgão de Direção Nacional de Partido Político"},
		{"3263", "Órgão de Direção Regional de Partido Político"},
		{"3271", "Órgão de Direção Local de Partido Político"},
		{"3280", "Comitê Financeiro de Partido Político"},
		{"3298", "Frente Plebiscitária ou Referendária"},
		{"3301", "Organização Social (OS)"},
		{"3999", "Associação Privada"},
		{"4014", "Empresa Individual Imobiliária"},
		{"4022", "Segurado Especial"},
		{"4081", "Contribuinte Individual"},
		{"4090", "Candidato a Cargo Político Eletivo"},
		{"4111", "Leiloeiro"},
		{"4120", "Produtor Rural (Pessoa Física)"},
		{"5010", "Organização Internacional"},
		{"5029", "Representação Diplomática Estrangeira"},
		{"5037", "Outras Instituições Extraterritoriais"},
	}
	sort.Slice(items, func(i, j int) bool {
		return items[i].Descricao < items[j].Descricao
	})
	return items
}

func LookupNaturezaJuridica(code string) string {
	for _, n := range NaturezaJuridicaOptions() {
		if n.Codigo == code {
			return n.Descricao
		}
	}
	return code
}
