import time

from vault_client.client.conio_user import ConioUser

from conio_sdk.generated_protobuf import v1_pb2
from conio_sdk.services.conio.sdk.crypto_proof import any_field
from conio_sdk.services.conio.sdk.crypto_proof.crypto_proof_verification_strategy import CryptoProofVerificationStrategy


class ExpiryCryptoProofVerificationStrategy(CryptoProofVerificationStrategy):
    def verify(self, crypto_proof: v1_pb2.SignupCryptoRequest) -> bool:
        return self._proof_expiration(crypto_proof) >= int(time.time() * 1000)

    def verify_pay_for_bid(self, crypto_proof: v1_pb2.PayForBidCryptoRequest, user: ConioUser) -> bool:
        return self._proof_expiration(crypto_proof) >= int(time.time() * 1000)

    def verify_pay_for_bid_using_wiretransfer(
            self, bid_id: str, crypto_proof: v1_pb2.PayForBidWTCryptoRequest, user: ConioUser) -> bool:
        return self._proof_expiration(crypto_proof) >= int(time.time() * 1000)

    @classmethod
    def _proof_expiration(cls, crypto_proof) -> int:
        return any_field(crypto_proof, 'proofExpiration', 'proof_expiration')
