'use strict';

var Type = require('../type');

var _hasOwnProperty = Object.prototype.hasOwnProperty; var _toString = Object.prototype.toString;

function resolveYamlOmap(data) {

if (data === null) return true;

var objectKeys = [], index, length, pair, pairKey, pairHasKey,
    object = data;

for (index = 0, length = object.length; index < length; index += 1) {
  pair = object[index];
  pairHasKey = false;

  if (_toString.call(pair) !== '[object Object]') return false;

  for (pairKey in pair) {
    if (_hasOwnProperty.call(pair, pairKey)) {
      if (!pairHasKey) pairHasKey = true;
      else return false;
    }
  }

  if (!pairHasKey) return false;

  if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);
  else return false;
}

return true;

}

function constructYamlOmap(data) {

return data !== null ? data : [];

}

module.exports = new Type('tag:yaml.org,2002:omap', {

kind: 'sequence',
resolve: resolveYamlOmap,
construct: constructYamlOmap

});