import { validateNumber } from '../core/validate';
import {
  composer,
  fiterWithBinaryStr
} from '../core/utils';
import Electronic from './electronic';
import protocolAssembler from '../protocol/cmd';
import Control from '../core/control';
import { SUPPORTLIST } from '../settings';


/**
 * Shutter sensor module
 * @extends Electronic
 */
class Shutter extends Electronic {
  constructor(port) {
    super();
    this.args = {
      port: validateNumber(port),
      action: null
    };
  }

  /**
   * set shutter mode
   * @param {string} actionId - 动作id  0: 按下快门; 1: 松开快门; 2: 聚焦; 3: 停止聚焦
   */
  //TODO: 本API易用性还得改进
  action(actionId) {
    this.args.action = validateNumber(actionId);
    return this;
  }

  /**
   * getter of protocol
   */
  get protocol() {
    return composer(protocolAssembler.setShutter, [this.args.port, this.args.action]);
  }

  /**
   * run shutter with mode set before
   * @return {this}  模块实例
   */
  run() {
    Control.write(this.protocol);
    return this;
  }

  static get SUPPORT(){
    return fiterWithBinaryStr(SUPPORTLIST, '1111');
  }
}

export default Shutter;