class TSEVotosColumnsSelector:
    columns_candidato_list = {

        # BR
        0: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ],

        # MACRO
        1: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ],

        # UF
        2: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ],

        # MESO
        4: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MESO',
            'NOME_MESO',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'UF',
            'NOME_UF',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ],

        # MICRO
        5: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ],

        # MUNICIPIO
        6: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ],

        # MUNZONA
        7: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'NUM_ZONA',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ],

        # ZONA
        8: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ],

        9: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'NUM_ZONA',
            'NUM_SECAO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NOME_CANDIDATO',
            'SEQUENCIAL_CANDIDATO',
            'NUMERO_CANDIDATO',
            'CPF_CANDIDATO',
            'NOME_URNA_CANDIDATO',
            'COD_SITUACAO_CANDIDATURA',
            'DES_SITUACAO_CANDIDATURA',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'CODIGO_LEGENDA',
            'SIGLA_LEGENDA',
            'COMPOSICAO_LEGENDA',
            'CODIGO_OCUPACAO',
            'DESCRICAO_OCUPACAO',
            'DATA_NASCIMENTO',
            'NUM_TITULO_ELEITORAL_CANDIDATO',
            'IDADE_DATA_ELEICAO',
            'CODIGO_SEXO',
            'DESCRICAO_SEXO',
            'COD_GRAU_INSTRUCAO',
            'DESCRICAO_GRAU_INSTRUCAO',
            'CODIGO_ESTADO_CIVIL',
            'DESCRICAO_ESTADO_CIVIL',
            'CODIGO_COR_RACA',
            'DESCRICAO_COR_RACA',
            'CODIGO_NACIONALIDADE',
            'DESCRICAO_NACIONALIDADE',
            'SIGLA_UF_NASCIMENTO',
            'CODIGO_MUNICIPIO_NASCIMENTO',
            'NOME_MUNICIPIO_NASCIMENTO',
            'DESPESA_MAX_CAMPANHA',
            'COD_SIT_TOT_TURNO',
            'DESC_SIT_TOT_TURNO',
            'EMAIL_CANDIDATO',
            'TIPO_LEGENDA',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS'
        ]

    }

    columns_legenda_list = {

        # BR
        0: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ],

        # MACRO
        1: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ],

        # UF
        2: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ],

        # MESO
        4: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ],

        # MICRO
        5: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ],

        # MUNICIPIO
        6: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ],

        # munzona
        7: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ],

        # zona
        8: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ],

        # VOTSEC
        9: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'NUM_SECAO',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'NUMERO_PARTIDO',
            'SIGLA_PARTIDO',
            'NOME_PARTIDO',
            'QTDE_VOTOS',
        ]

    }

    columns_coligacao_list = {

        # BR
        0: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ],

        # MACRO
        1: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ],

        # UF
        2: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ],

        # MESO
        4: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'UF',
            'NOME_UF',
            'CODIGO_MESO',
            'NOME_MESO',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ],

        # MICRO
        5: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ],

        # MUNICIPIO
        6: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ],

        # MUNZONA
        7: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'COD_MUN_TSE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ],

        # ZONA
        8: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ],

        # VOTSEC
        9: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'NUM_SECAO',
            'COD_MUN_TSE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'SIGLA_UE',
            'DESCRICAO_UE',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'SIGLA_COLIGACAO',
            'NOME_COLIGACAO',
            'COMPOSICAO_COLIGACAO',
            'QTDE_VOTOS',
        ]

    }

    columns_detalhe_list = {

        # BR
        0: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP'
        ],

        # MACRO
        1: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP',
        ],

        # UF
        2: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP',
        ],

        # MESO
        4: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP',
        ],

        # MICRO
        5: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP',
        ],

        # MUNICIPIO
        6: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP',
        ],

        # MUNZONA
        7: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP',
        ],

        # ZONA
        8: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP',
        ],

        # VOTACAO SECAO
        9: [
            'ANO_ELEICAO',
            'NUM_TURNO',
            'NUM_ZONA',
            'NUM_SECAO',
            'COD_MUN_TSE',
            'COD_MUN_IBGE',
            'NOME_MUNICIPIO',
            'CODIGO_MICRO',
            'NOME_MICRO',
            'CODIGO_MESO',
            'NOME_MESO',
            'UF',
            'NOME_UF',
            'CODIGO_MACRO',
            'NOME_MACRO',
            'DESCRICAO_ELEICAO',
            'CODIGO_CARGO',
            'DESCRICAO_CARGO',
            'QTD_APTOS',
            'QTD_COMPARECIMENTO',
            'QTD_ABSTENCOES',
            'QT_VOTOS_NOMINAIS',
            'QT_VOTOS_BRANCOS',
            'QT_VOTOS_NULOS',
            'QT_VOTOS_LEGENDA',
            'QT_VOTOS_ANULADOS_APU_SEP',
        ],

    }

    def __init__(self, pol, reg):
        self.reg = reg
        self.pol = pol

    def columns(self):
        if self.pol == 2:
            return self.columns_candidato_list[self.reg] + ["ID_CANDIDATO", "ID_LEGENDA"]
        elif self.pol == 1:
            return self.columns_legenda_list[self.reg] + ["ID_LEGENDA"]
        elif self.pol == 3:
            return self.columns_coligacao_list[self.reg] + ["ID_LEGENDA"]
        elif self.pol == 4:
            return self.columns_detalhe_list[self.reg]

    def visible_columns(self):
        columns = ['ANO_ELEICAO', 'NUM_TURNO']

        if self.reg == 5:
            columns += ['NOME_MICRO']
        elif self.reg == 4:
            columns += ['UF', 'NOME_MESO']
        elif self.reg == 2:
            columns += ['UF']
        elif self.reg == 1:
            columns += ['NOME_MACRO']
        elif self.reg == 6:
            columns += ['UF', 'COD_MUN_TSE', 'NOME_MUNICIPIO']
        elif self.reg == 7:
            columns += ['UF', 'COD_MUN_TSE', 'NOME_MUNICIPIO', 'NUM_ZONA']
        elif self.reg == 8:
            columns += ['UF', 'NUM_ZONA']
        elif self.reg == 9:
            columns += ['NUM_ZONA', 'NUM_SECAO']

        columns += ['CODIGO_CARGO', 'DESCRICAO_CARGO']

        if self.pol == 2:
            columns += ['NUMERO_PARTIDO', 'SIGLA_PARTIDO', 'NOME_CANDIDATO', 'NUMERO_CANDIDATO',
                        'NUM_TITULO_ELEITORAL_CANDIDATO', 'DESC_SIT_TOT_TURNO', 'CPF_CANDIDATO']
        elif self.pol == 1:
            columns += ['SIGLA_PARTIDO']
        elif self.pol == 3:
            columns += ['COMPOSICAO_COLIGACAO']
        elif self.pol == 4:
            columns += ['QTD_APTOS', 'QTD_COMPARECIMENTO', 'QTD_ABSTENCOES', 'QT_VOTOS_NOMINAIS', 'QT_VOTOS_LEGENDA']

        if self.pol != 4:
            columns += ['QTDE_VOTOS']

        return columns

    def sum_columns(self):
        if self.pol == 4:
            return ['QTD_APTOS',
                    'QTD_COMPARECIMENTO',
                    'QTD_ABSTENCOES',
                    'QT_VOTOS_NOMINAIS',
                    'QT_VOTOS_BRANCOS',
                    'QT_VOTOS_NULOS',
                    'QT_VOTOS_LEGENDA',
                    'QT_VOTOS_ANULADOS_APU_SEP']
        else:
            return ["QTDE_VOTOS"]

    def order_by_columns(self):
        return ['UF', 'NUM_ZONA', 'NUM_TURNO', 'SIGLA_PARTIDO', 'NOME_CANDIDATO', 'COMPOSICAO_COLIGACAO',
                'COMPOSICAO_COLIGACAO', 'COD_MUN_IBGE']
