/**
 * PeerController
 *
 * @description :: Server-side logic for managing Peers
 * @help        :: See http://links.sailsjs.org/docs/controllers
 */

module.exports = {
  /**
   * ファイルに属するピアの一覧を取得
   * GET /peers?path={file path}
   */
  find: function (req, res) {
    sails.log.info('API called: GET /peers');
    
    var path = req.param('path');
    sails.log.info('API params: path =', path);
    
    File.findOne({ path: path })
      .populate('peers')
      .exec(function (err, file) {
        if (err) {
          sails.log.error(err);
          return res.json(400, { error: 'Invalid parameter `path`' });
        }
        
        if (!file) {
          return res.ok({
            file: {
              path: path,
              peers: []
            }
          });
        }
        
        res.ok({ file: file });
      });
  },
  
  /**
   * ファイルに属するピアを追加
   * POST /peers?path={file path}&peerId={peer id}
   */
  create: function (req, res) {
    sails.log.info('API called: POST /peers');
    
    var path = req.param('path');
    sails.log.info('API params: path =', path);
    
    var peerId = req.param('peerId');
    sails.log.info('API params: peerId =', peerId);
    
    File.findOrCreate({ path: path }, { path: path })
      .populate('peers')
      .exec(function (err, file) {
        if (err) {
          sails.log.error(err.toString());
          return res.json(400, { error: 'Invalid parameter `path`' });
        }
        
        // 既にピアが登録されている場合の処理
        var hasPeer = _.some(file.peers, function (peer) {
          return peer.peerId === peerId;
        });
        
        if (hasPeer) {
          return res.json({ file: file });
        }
        
        Peer.create({ peerId: peerId, file: file })
          .exec(function (err, peer) {
            if (err) {
              sails.log.error(err.toString());
              return res.json(400, { error: 'Invalid parameter `peerId`' });
            }
            
            file.peers.push(peerId);
            return res.json({ file: file });
          });
      });
  },
  
  /**
   * ファイルに属するピアを削除
   * DELETE /peers?path={file path}&peerId={peer id}
   */
  destroy: function (req,res) {
    sails.log.info('API called: DELETE /peers');
    
    var path = req.param('path');
    sails.log.info('API params: path =', path);
    
    var peerId = req.param('peerId');
    sails.log.info('API params: peerId =', peerId);
    
    File.findOne({ path: path })
      .populate('peers', { where: { peerId: peerId }}) // 結合で該当するピアのみに絞る
      .exec(function (err, file) {
        if (err) {
          sails.log.error(err.toString());
          return res.json(400, { error: 'Invalid parameter `path`' });
        }
        
        if (!file || _.size(file.peers) === 0) {
          return res.json(404, { error: 'Not found' });
        }
        
        Peer.destroy(file.peers[0].id, function (err, peers) {
          if (err) {
            sails.log.error(err.toString());
            return res.json(400, { error: 'Invalid parameter `peerId`' });
          }
          
          if (peers.length === 0) {
            return res.json(404, { error: 'Not found' });
          }
          
          // 削除したピアを変数から削除
          file.peers = _.filter(file.peers, function (p) {
            return p.peerId !== peerId;
          });
          
          res.ok({ file: file });
        });
      });
  }
};


@@ -2486,57 +2486,9 @@
 ers'
-, %7B where: %7B peerId: peerId %7D%7D) // %E7%B5%90%E5%90%88%E3%81%A7%E8%A9%B2%E5%BD%93%E3%81%99%E3%82%8B%E3%83%94%E3%82%A2%E3%81%AE%E3%81%BF%E3%81%AB%E7%B5%9E%E3%82%8B
+)
 %0A   
@@ -2807,34 +2807,258 @@
     
-Peer.destroy(file.peers%5B0%5D
+// %E5%89%8A%E9%99%A4%E5%AF%BE%E8%B1%A1%E3%81%AE%E3%83%94%E3%82%A2%E3%82%92%E5%8F%96%E5%BE%97%0A        var destroyPeer = _.find(file.peers, function (p) %7B return p.peerId === peerId; %7D);%0A        %0A        if (!destroyPeer) %7B%0A          return res.json(404, %7B error: 'Not found' %7D);%0A        %7D%0A        %0A        Peer.destroy(destroyPeer
 .id,

Fix bug