class CreateContabilidadeSubElementosDeDespesaDaMatriz < ActiveRecord::Migration[5.2]
  def change
    create_table :contabilidade_sub_elementos_de_despesa_da_matriz do |t|
      t.bigint :elemento_de_despesa_id
      t.bigint :sub_elemento_de_despesa_id
      t.text :descricao
      t.text :codigo, limit: 2

      t.timestamps
    end

    orcamento = Orcamento.find_by(exercicio: 2022)
    if orcamento.present?
      elementos_da_matriz = JSON.parse(File.read('db/data_seeds/contabilidade/pcasp/matriz_2022.json'))
      elementos_agrupados = elementos_da_matriz.group_by { |elemento_de_despesa| elemento_de_despesa['codigo'].to_s.chop.chop + '00' }

      elementos_agrupados.each do |codigo_elemento_de_despesa, atributos_sub_elemento|
        id_elemento_de_despesa = orcamento.elementos_de_despesa.find_by(codigo: codigo_elemento_de_despesa).try(:id)
        if id_elemento_de_despesa.present?
          codigos_sub_elementos = atributos_sub_elemento.map { |atributo| atributo['codigo'].to_s.last(2) }
          descricoes = atributos_sub_elemento.map { |atributo| atributo['descricao'] }
          codigos_sub_elementos.each_with_index do |codigo_sub_elemento, index|
            Contabilidade::SubElementoDeDespesaDaMatriz.create(elemento_de_despesa_id: id_elemento_de_despesa, codigo: codigo_sub_elemento, descricao: descricoes[index])
          end
        end
      end
    end
  end
end
