import React from 'react';
import request from 'superagent';
import {State, Link} from 'react-router';
import Foot from './foot';

var MusicItem = React.createClass({

  render: function() {
    if (!this.props.item.matched_at) {
      return (
        <div className='col-md-3 col-xs-6'>
          <div className='service'>
            <div className='artwork' style={{backgroundImage: 'url(' + this.props.items[0].artwork.small + ')'}}>
            </div>
            <div className='loading-wrap'>
              <img src='/images/eq.svg' className='loading' />
            </div>
            <div className='service-link'>
              <img src={'/images/' + this.props.item.service + '.png'} className='img-rounded' />
            </div>
          </div>
        </div>
      );
    } else if (!this.props.item.id) {
      return (
        <div className='col-md-3 col-xs-6'>
          <div className='service'>
            <div className='artwork not-found' style={{backgroundImage: 'url(' + this.props.items[0].artwork.small + ')'}}></div>
            <div className='no-match'>
              No Match
            </div>
            <div className='service-link not-found'>
              <img src={'/images/' + this.props.item.service + '.png'} className='img-rounded' />
            </div>
          </div>
        </div>
      );
    } else {
      return (
        <div className='col-md-3 col-xs-6'>
          <div className={'service' + (this.props.inc === 0 ? ' source-service' : '')}>
            <div className='matching-from hidden-xs'>{this.props.inc === 0 ? 'Found matches using this link' : ''}</div>
            <a href={this.props.item.streamUrl || this.props.item.purchaseUrl}>
              <div className={this.props.item.service === 'youtube' ? 'artwork-youtube artwork' : 'artwork'} style={{backgroundImage: 'url(' + this.props.item.artwork.small + ')'}}>
              </div>
              <div className={this.props.item.service === 'youtube' && this.props.inc > 0 ? 'youtube' : ''}>
                {this.props.item.service === 'youtube' && this.props.inc > 0 ? this.props.item.name : ''}
              </div>
            </a>
            <div className='service-link'>
              <a href={this.props.item.streamUrl || this.props.item.purchaseUrl}>
                <img src={'/images/' + this.props.item.service + '.png'} className='img-rounded' />
              </a>
            </div>
          </div>
        </div>
      );
    }
  }

});

export default React.createClass({

  mixins: [ State ],

  getInitialState: function () {
    if (this.props.shares && this.props.shares[0].id === this.getParams().id) {
      return {
        name: this.props.shares[0].name,
        artist: this.props.shares[0].artist.name,
        shares: this.props.shares,
        shareUrl: 'https://match.audio/' + this.props.shares[0].service + '/' + this.props.shares[0].type + '/' + this.props.shares[0].id
      };
    }
    return {
      name: '',
      artist: '',
      shares: [],
      shareUrl: ''
    };
  },

  componentWillUnmount: function() {
    if (this.state.interval) {
      clearInterval(this.state.interval);
    }
  },

  componentDidMount: function () {
    var complete = this.state.shares.length > 0;

    this.state.shares.forEach(function(share) {
      if (typeof share.matched_at === 'undefined') {
        complete = false;
      }
    });

    var getShares = function() {
      request.get(this.getPathname() + '.json').end(function(err, res) {
        var shares = res.body.shares;
        complete = true;
        shares.forEach(function(share) {
          if (typeof share.matched_at === 'undefined') {
            complete = false;
          }
        });

        if (complete) {
          clearInterval(this.state.interval);
        }

        if (shares.length) {
          this.setState({
            name: shares[0].name,
            artist: shares[0].artist.name,
            shares: shares,
            shareUrl: 'https://match.audio/' + shares[0].service + '/' + shares[0].type + '/' + shares[0].id
          });
        }
      }.bind(this));
    }.bind(this);

    if (!this.state.shares.length) {
      getShares();
    }

    // Temporary until websockets implementation
    this.state.interval = setInterval(function() {
      if (!complete) {
        getShares();
      }
    }, 2000);

    // Some hacks to pop open the Twitter/Facebook/Google Plus sharing dialogs without using their code.
    Array.prototype.forEach.call(document.querySelectorAll('.share-dialog'), function(dialog){
      dialog.addEventListener('click', function(event) {
        event.preventDefault();
        var w = 845;
        var h = 670;
        var dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left;
        var dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top;

        var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
        var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;

        var left = ((width / 2) - (w / 2)) + dualScreenLeft;
        var top = ((height / 2) - (h / 2)) + dualScreenTop;
        var newWindow = window.open(dialog.href, 'Share Music', 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
        if (window.focus) {
          newWindow.focus();
        }
      });
    });
  },

  render: function() {
    return (
      <div>
        <div className='page-wrap share'>
          <header>
            <div className='container'>
              <div className='row'>
                <div className='col-md-12'>
                  <h1><Link to='home'>match<span className='audio-lighten'>.audio</span></Link></h1>
                </div>
              </div>
            </div>
          </header>
          <div className='container'>
            <div className='row'>
              <div className='col-md-9 col-sm-8 col-xs-12'>
                <h3>Matched {this.state.shares[0] ? this.state.shares[0].type + 's' : ''} for</h3>
                <h2>{this.state.name} <span className='artist-lighten'>- {this.state.artist}</span></h2>
              </div>
              <div className='col-md-3 col-sm-4 hidden-xs'>
                <ul className='list-inline share-tools'>
                  <li>Share this</li>
                  <li><a href={'http://twitter.com/intent/tweet/?text=' + encodeURIComponent(this.state.name) + ' by ' + encodeURIComponent(this.state.artist) + '&via=MatchAudio&url=' + this.state.shareUrl} className='share-dialog'><img src='/images/twitter.png' alt='Twitter' /></a></li>
                  <li><a href={'http://www.facebook.com/sharer/sharer.php?p[url]=' + this.state.shareUrl} className='share-dialog'><img src='/images/facebook.png' alt='Facebook' /></a></li>
                  <li><a href={'https://plus.google.com/share?url=' + this.state.shareUrl} className='share-dialog'><img src='/images/googleplus.png' alt='Google+' /></a></li>
                </ul>
              </div>
            </div>
            <div className='row'>
              {this.state.shares.map(function(item, i){
                return (<MusicItem items={this.state.shares} item={item} inc={i} key={i} />);
              }.bind(this))}
            </div>
          </div>
        </div>
        <Foot page='share' />
      </div>
    );
  }
});