<div id="asset-display-component">
    <p id="search-message" hidden="true">We're currently combing the blockchain for your asset!</p>
    <p id="failure-message" hidden="true"></p>
    <div id="asset-holder" hidden="true">
        {{#ifConditional claimInfo.contentType '===' 'video/mp4'}}
            {{> video}}
        {{else}}
            {{> image}}
        {{/ifConditional}}
    </div>
</div>

<script type="text/javascript">

    const getAssetFunctions = {
        showAsset: function () {
            const searchMessage = document.getElementById('search-message');
            const assetHolder = document.getElementById('asset-holder');
            const asset = document.getElementById('asset');
            searchMessage.hidden = true;
            assetHolder.hidden = false;
            asset.setAttribute('src', `/{{claimInfo.claimId}}/{{claimInfo.name}}.{{claimInfo.fileExt}}`);
        },
        showSearchMessage: function (msg) {
            console.log(msg);
            const searchMessage = document.getElementById('search-message');
            searchMessage.hidden = false;
        },
        showFailureMessage: function (msg) {
            console.log(msg);
            const searchMessage = document.getElementById('search-message');
            const failureMessage = document.getElementById('failure-message');
            searchMessage.hidden = true;
            failureMessage.hidden = false;
            failureMessage.innerText = msg;
        },
        checkClaimAvailability: function (claimName, claimId) {
            console.log(`getting ${claimName}#${claimId}`)
            var uri = `/api/check_local_claim/${claimName}/${claimId}`;
            var xhr = new XMLHttpRequest();
            var that = this;
            xhr.open("GET", uri, true);
            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4) {
                    const response = JSON.parse(xhr.response);
                    if (xhr.status == 200) {
                        if (response.message === true) {
                            console.log('local asset is available on spee.ch')
                            that.showAsset();
                        } else {
                            that.showSearchMessage();
                            that.getAsset(claimName, claimId)
                        }
                    } else {
                        console.log('get failed:', response);
                        that.showFailureMessage('Well this sucks, but we can\'t seem to phone home');
                    }
                } else {
                    console.log('xhr.readyState', xhr.readyState);
                }
            };
            // Initiate a multipart/form-data upload
            xhr.send();
        },
        getAsset: function(claimName, claimId) {
            console.log(`getting ${claimName}#${claimId}`)
            var uri = `/api/get_claim/${claimName}/${claimId}`;
            var xhr = new XMLHttpRequest();
            var that = this;
            xhr.open("GET", uri, true);
            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4) {
                    const response = JSON.parse(xhr.response);
                    if (xhr.status == 200) {
                        console.log('get returned successfully', response);
                        if (response.completed === true) {
                            console.log('lbrynet has finished downloading the asset');
                            that.showAsset();
                        } else {
                            console.log('lbrynet is still downloading the asset');
                            setTimeout(getAsset, 5000);
                        }
                    } else {
                        console.log('get failed:', response);
                        that.showFailureMessage(`${response.message}`);
                    }
                } else {
                    console.log('xhr.readyState', xhr.readyState);
                }
            };
            // Initiate a multipart/form-data upload
            xhr.send();
        },
    }

    getAssetFunctions.checkClaimAvailability('{{claimInfo.name}}', '{{claimInfo.claimId}}');

</script>