module Glueby

module Contract
  module Task
    module Timestamp
      module_function
      extend Glueby::Contract::TxBuilder
      extend Glueby::Contract::Timestamp::Util
      def create
        timestamps = Glueby::Contract::AR::Timestamp.where(status: :init)
        timestamps.each do |t|
          begin
            ::ActiveRecord::Base.transaction do
              wallet = Glueby::Wallet.load(t.wallet_id)
              tx = create_tx(wallet, t.prefix, t.content_hash, Glueby::Contract::FixedFeeEstimator.new)
              wallet.internal_wallet.broadcast(tx) do |tx|
                t.update(txid: tx.txid, status: :unconfirmed)
              end
              puts "broadcasted (id=#{t.id}, txid=#{tx.txid})"
            end
          rescue => e
            puts "failed to broadcast (id=#{t.id}, reason=#{e.message})"
          end
        end
      end
    end
  end
end

end

namespace :glueby do

namespace :contract do
  namespace :timestamp do
    desc 'create and broadcast glueby timestamp tx'
    task :create, [] => [:environment] do |_, _|
      Glueby::Contract::Task::Timestamp.create
    end
  end
end

end