FactoryBot.define do
  factory :user do
    sequence(:nome) { |n| "Usuario Teste #{n}" }
    sequence(:email) { |n| "user#{n}@gade.com" }
    password { 'Gade@2026!' }
    role { :operador }
    ativo { true }

    factory :admin   do role { :admin }   end
    factory :gerente do role { :gerente } end
    factory :operador do role { :operador } end

    factory :externo do role { :externo } end

    factory :motorista do
      role { :motorista }
      # email é NOT NULL + único no banco; motorista real não tem e-mail, então
      # usamos um placeholder único (mesma estratégia do db/seeds.rb).
      sequence(:email) { |n| "motorista#{n}@motorista.local" }
      password { nil }
      sequence(:nome) { |n| "Motorista #{n}" }
      sequence(:pin_code) { |n| format('%04d', n % 10000) }
    end
  end

  factory :perfil_acesso do
    sequence(:nome) { |n| "Perfil #{n}" }
    # Um conjunto pequeno e realista: ver e fechar, sem pagar nem administrar.
    permissoes { %w[consolidacao.ver consolidacao.editar consolidacao.finalizar] }
  end

  factory :configuracao do
    chave { 'empresa_nome' }
    valor { 'Reem Transporte' }
  end

  factory :consolidacao do
    sequence(:nome) { |n| "Consolidacao #{n}" }
    data_inicio { Date.new(2026, 6, 1) }
    data_fim    { Date.new(2026, 6, 30) }
    association :criador, factory: :gerente
    status { :rascunho }
  end

  factory :consolidacao_motorista do
    association :consolidacao
    sequence(:motorista_nome) { |n| "Motorista #{n}" }
  end

  factory :consolidacao_veiculo do
    association :consolidacao
    sequence(:motorista_nome) { |n| "Motorista #{n}" }
    sequence(:vehicle) { |n| "GADE_#{format('%03d', n)}" }
  end

  factory :consolidacao_entrega do
    association :consolidacao
    sequence(:tracking_id) { |n| "TRK-#{n}" }
    motorista_nome { 'Joao Silva' }
    tipo { :entrega_normal }
    valor_aplicado { 15.0 }
  end

  factory :variavel_personalizada do
    sequence(:chave) { |n| "variavel_#{n}" }
    valor { 'Valor de teste' }
    ativo { true }
  end

  factory :grupo_contato do
    sequence(:nome) { |n| "Grupo #{n}" }
    ativo { true }
  end

  factory :contato do
    sequence(:nome) { |n| "Contato #{n}" }
    sequence(:telefone) { |n| format('11 9%04d-%04d', n % 10000, (n * 7) % 10000) }
    ativo { true }
    association :grupo_contato
  end

  factory :evento_notificacao do
    sequence(:nome)  { |n| "Evento #{n}" }
    sequence(:chave) { |n| "evento_#{n}" }
    gatilho { 'manual' }
    ativo { true }
    notificar_envolvido { true }
    hora { 8 }
  end

  factory :grupo_evento_assinatura do
    association :grupo_contato
    association :evento_notificacao
    canal { 'ambos' }
    ativo { true }
  end

  factory :historico_estimado do
    data_hora { Time.current }
    valor_total_estimado { 150.0 }
    entregas_contadas { 10 }
  end
end

FactoryBot.define do
  factory :romaneio do
    planned_date { Date.new(2026, 8, 31) }
    operacao_tabela { '' }
    rotulo_plano { 'EMAD 09.2026' }
    origem { 'planilha' }
  end

  factory :romaneio_linha do
    romaneio
    veiculo { 'GADE_001' }
    sequence(:ordem)
    sequence(:nota_fiscal) { |n| (90_000 + n).to_s }
    chave_origem { nota_fiscal }
    nome { 'FULANO DE TAL' }
    endereco { 'RUA X, 1, BAIRRO, SÃO PAULO, SP' }
    aparelho { '' }
    telefones { '(11) 90000-0000' }
    origem do
      { 'nota_fiscal' => nota_fiscal, 'nome' => nome, 'endereco' => endereco,
        'aparelho' => aparelho, 'telefones' => telefones }
    end
    campos_editados { [] }
  end

  factory :romaneio_veiculo do
    romaneio
    veiculo { 'GADE_001' }
    motorista { '' }
    posicao { 0 }
  end
end
