/**
 * Created by avim on 12/2/2014.
 */
define(['react', 'firebase', 'lodash', './fiddle.rt', 'jquery'], function (React, Firebase, _, fiddleTemplate, $) {
    'use strict'

    function generateRandomId() {
        var uuid = 'xxxxxxxx'.replace(/[xy]/g, function (c) {
            var r = _.random(0, 15)
            return (c === 'x' ? r : r & 0x3 | 0x8).toString(16)
        })
        return uuid
    }

    var Fiddle = React.createClass({
        displayName: 'Fiddle',
        componentDidMount: function () {
            if (window.location.hash) {
                var newHash = window.location.hash.replace('#', '')
                var firebase = new Firebase('https://reacttemplates.firebaseio-demo.com/')
                firebase.child('fiddles').child(newHash).on('value', function (snapshot) {
                    this.refs.playground.setState(snapshot.val())
                    Firebase.goOffline()
                }.bind(this))
            } else {
                Firebase.goOffline()
            }
        },
        save: function () {
            var newHash = generateRandomId()
            window.location.hash = newHash
            Firebase.goOnline()

            var playgroundState = this.refs.playground.state
            var firebase = new Firebase('https://reacttemplates.firebaseio-demo.com/')
            firebase.child('fiddles').child(newHash).set(playgroundState, function () {
                Firebase.goOffline()
                alert('Saved the fiddle, you can share your url') //eslint-disable-line no-alert
            })
        },
        clear: function () {
            this.refs.playground.clear()
        },
        loadSample: function (name) {
            //require(['text!./samples/' + name + '.rt', 'text!./samples/' + name + '.code'], function (rt, code) {
            //    var currentState = {
            //        templateHTML: rt,
            //        templateProps: code
            //    };
            //    //this.updateSample(currentState);
            //    this.refs.playground.setState(currentState);
            //});

            var playground = this.refs.playground
            $.get('playground/samples/' + name + '.rt', null, function (data/*, textStatus, jqXHR*/) {
                var rt = data
                $.get('playground/samples/' + name + '.code', null, function (data2/*, textStatus2, jqXHR2*/) {
                    var currentState = {
                        templateHTML: rt,
                        templateProps: _.template(data2)({name: 'template'})
                    }
                    //this.updateSample(currentState);
                    playground.setState(currentState)
                })
            })
            //this.refs.playground.clear();
        },
        render: fiddleTemplate
    })

    return Fiddle
})