var DataSource = require('../../loopback-datasource-juggler').DataSource;
var ModelBuilder = require('../../loopback-datasource-juggler').ModelBuilder;
var introspectType = require('../lib/introspection')(ModelBuilder);

var ds = new DataSource('memory');

// Create a open model that doesn't require a schema
var Application = ds.createModel('Schemaless', {}, {strict: false});

var application = {
    owner: 'rfeng',
    name: 'MyApp1',
    description: 'My first app',
    pushSettings: [
        {   "platform": "apns",
            "apns": {
                "pushOptions": {
                    "gateway": "gateway.sandbox.push.apple.com",
                    "cert": "credentials/apns_cert_dev.pem",
                    "key": "credentials/apns_key_dev.pem"
                },

                "feedbackOptions": {
                    "gateway": "feedback.sandbox.push.apple.com",
                    "cert": "credentials/apns_cert_dev.pem",
                    "key": "credentials/apns_key_dev.pem",
                    "batchFeedback": true,
                    "interval": 300
                }
            }}
    ]}

console.log(new Application(application).toObject());

Application.create(application, function (err, app1) {
    console.log('Created: ', app1.toObject());
    Application.findById(app1.id, function (err, app2) {
        console.log('Found: ', app2.toObject());
    });
});

// Instance JSON document
var user = {
    name: 'Joe',
    age: 30,
    birthday: new Date(),
    vip: true,
    address: {
        street: '1 Main St',
        city: 'San Jose',
        state: 'CA',
        zipcode: '95131',
        country: 'US'
    },
    friends: ['John', 'Mary'],
    emails: [
        {label: 'work', id: 'x@sample.com'},
        {label: 'home', id: 'x@home.com'}
    ],
    tags: []
};

// Introspect the JSON document to generate a schema
var schema = introspectType(user);

// Create a model for the generated schema
var User = ds.createModel('User', schema, {idInjection: true});

// Use the model for CRUD
var obj = new User(user);

console.log(obj.toObject());

User.create(user, function (err, u1) {
    console.log('Created: ', u1.toObject());
    User.findById(u1.id, function (err, u2) {
        console.log('Found: ', u2.toObject());
    });
});