FactoryBot.define do
	factory :licitacao_projeto, class: 'Licitacao::Projeto' do
		pedido_id {
			FactoryBot.create(:pedido, :fechado, status: :projeto_gerado).id
		}
		orcamento_id {
			Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016) ).id
		}
		comissao_id {
			Licitacao::Comissao.find_or_create_by!( FactoryBot.attributes_for(:licitacao_comissao) ).id
		}
		tipo_de_totalizacao {"valor_medio"}
		legislacao_id {
			Base::Legislacao.find_or_create_by!(FactoryBot.attributes_for(:lei_escolas)).id
		}
		modalidade_do_processo {"processo_licitatorio"}
		modalidade_de_licitacao {"pregao_eletronico"}
		registro_de_preco {false}
		envia_pro_sim {true}
		data_do_projeto {"2016-10-19".to_date}
		forma_de_agrupamento {"global"}
		data_da_sessao {"2016-10-25".to_date}
		horario_da_abertura {'12:30'}
		lei_federal {"lei_8666_93"}

		trait :tomada_de_precos do
			modalidade_do_processo {"processo_licitatorio"}
			modalidade_de_licitacao {"tomada_de_precos"}
			tipo_de_totalizacao {"menor_valor"}
			criterio_de_julgamento {"menor_preco"}
			forma_de_agrupamento {"por_item"}
		end

		trait :convite do
			modalidade_do_processo {"processo_licitatorio"}
			modalidade_de_licitacao {"convite"}
			tipo_de_totalizacao {"menor_valor"}
			forma_de_agrupamento {"por_item"}
		end

		trait :contratacao_consultoria_individual do
			modalidade_do_processo {"processo_licitatorio"}
			modalidade_de_licitacao {"contratacao_consultoria_individual"}
			tipo_de_totalizacao {"menor_valor"}
			forma_de_agrupamento {"por_item"}
		end

		trait :dispensa do
			modalidade_do_processo {"dispensa_de_licitacao"}
			modalidade_de_licitacao {"dispensa_ou_inexigibilidade"}
			tipo_de_totalizacao {"menor_valor"}
			forma_de_agrupamento {"por_item"}
		end

		trait :dispensa_lei_14133_21 do
			modalidade_do_processo {"dispensa_de_licitacao"}
			modalidade_de_licitacao {"dispensa_ou_inexigibilidade"}
			tipo_de_totalizacao {"menor_valor"}
			forma_de_agrupamento {"por_item"}
			lei_federal {"lei_14133_21"}
		end

		trait :inexigibilidade do
			modalidade_do_processo {"inexigibilidade_de_licitacao"}
			modalidade_de_licitacao {"dispensa_ou_inexigibilidade"}
			tipo_de_totalizacao {"menor_valor"}
			forma_de_agrupamento {"por_item"}
		end

		trait :simplificado do
			pedido_id {
				FactoryBot.create(:pedido, :simplificado).id
			}
		end

		before(:create) do |projeto|
			projeto.atas_das_sessoes.build
		end

		trait :por_lote do
			forma_de_agrupamento {"por_lote"}
			after(:create) do |projeto|
				projeto.em_sessao!
				pessoas_do_projeto = FactoryBot.create_list(:licitacao_pessoa_do_projeto, 2, projeto_id: projeto.id)
				projeto.reload
				projeto.pedido.itens_do_pedido.each do |item_do_pedido|
					pessoas_do_projeto.each do |pessoa_do_projeto|
						FactoryBot.create(:item_do_projeto_por_pessoa, item_do_lote_id: item_do_pedido.item_do_lote.id, pessoa_do_projeto_id: pessoa_do_projeto.id, final: false)
						FactoryBot.create(:item_do_projeto_por_pessoa, item_do_lote_id: item_do_pedido.item_do_lote.id, pessoa_do_projeto_id: pessoa_do_projeto.id, final: true)
					end
				end
			end
		end

		trait :enviado_para_o_sim do
			arquivo_id {
				FactoryBot.create(:tcm_arquivo).id
			}
		end

		trait :por_item do
			forma_de_agrupamento {"por_item"}

			after(:create) do |projeto|
				projeto.reload
				lotes = if projeto.lotes.any?
									projeto.lotes
								else
									FactoryBot.create_list(:licitacao_lote, 1, projeto_id: projeto.id)
									FactoryBot.create_list(:licitacao_item_do_lote, 1, lote_id: lotes.first.id)
								end
				pessoas_do_projeto = FactoryBot.create_list(:licitacao_pessoa_do_projeto, 1, projeto_id: projeto.id)
				pessoas_do_projeto.each do |pessoa_do_projeto|
					lotes.each do |lote|
						lote.itens_do_lote.each do |il|
							FactoryBot.create(:item_do_projeto_por_pessoa, item_do_lote_id: il.id, pessoa_do_projeto_id: pessoa_do_projeto.id, final: false)
							FactoryBot.create(:item_do_projeto_por_pessoa, item_do_lote_id: il.id, pessoa_do_projeto_id: pessoa_do_projeto.id, final: true)
						end
					end
				end
			end
		end

		trait :global do
			forma_de_agrupamento {"global"}

			after(:create) do |projeto|
				projeto.em_sessao!
				FactoryBot.create_list(:licitacao_item_do_lote, 3, lote_id: projeto.lotes.first.id)
			end
		end

		trait :melhor_tecnica do
			modalidade_de_licitacao {"convite"}
			criterio_de_julgamento {"melhor_tecnica"}

			forma_de_agrupamento {"por_lote"}

			after(:create) do |projeto|
				projeto.em_sessao!
				lotes = FactoryBot.create_list(:licitacao_lote, 2, projeto_id: projeto.id, lances_abertos: true)
				FactoryBot.create_list(:licitacao_item_do_lote, 2, lote_id: lotes.first.id)
				FactoryBot.create_list(:licitacao_item_do_lote, 2, lote_id: lotes.second.id)
				pessoas_do_projeto = FactoryBot.create_list(:licitacao_pessoa_do_projeto, 2, projeto_id: projeto.id)
				pessoas_do_projeto.each do |pessoa_do_projeto|
					lotes.each do |lote|
						lote.itens_do_lote.each do |il|
							FactoryBot.create(:item_do_projeto_por_pessoa, item_do_lote_id: il.id, pessoa_do_projeto_id: pessoa_do_projeto.id, final: false)
						end
					end
				end
			end
		end
	end
end
