// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
// This file is part of Parity.

// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Parity.  If not, see <http://www.gnu.org/licenses/>.

const { api } = window.parity;

function trackRequest (requestPromise, statusCallback) {
  return requestPromise
    .then((signerRequestId) => {
      console.log('trackRequest', `posted to signer with requestId ${signerRequestId.toString()}`);
      statusCallback(null, { signerRequestId });

      return api.pollMethod('parity_checkRequest', signerRequestId);
    })
    .then((transactionHash) => {
      console.log('trackRequest', `received transaction hash ${transactionHash}`);
      statusCallback(null, { transactionHash });

      return api.pollMethod('eth_getTransactionReceipt', transactionHash, (receipt) => {
        if (!receipt || !receipt.blockNumber || receipt.blockNumber.eq(0)) {
          return false;
        }

        return true;
      });
    })
    .then((transactionReceipt) => {
      console.log('trackRequest', 'received transaction receipt', transactionReceipt);
      statusCallback(null, { transactionReceipt });
    })
    .catch((error) => {
      console.error('trackRequest', error);
      statusCallback(error);
      throw error;
    });
}

export {
  api,
  trackRequest
};
