/**
 * @file        General image component
 * @author      MicroMatrix <yangpan.1985@bytedance.com>
 * @copyright   2012-2020 bytedance
 * @link        git@code.byted.org:yangpan.1985/avg.git
 */

import React from 'react';
import PropTypes from 'prop-types';
import createComponent from 'components/createComponent';
import ContainerMixin from 'components/ContainerMixin';
import NodeMixin from 'components/NodeMixin';
import Sprite from 'classes/Sprite';
import pixiPropTypes from './pixi/propTypes';
import { mountNode, updateNode, setValue, updateValue } from './pixi/properties';

const RawImage = createComponent('RawImage', ContainerMixin, NodeMixin, {

  createNode() {
    this.node = new Sprite();
  },
  mountNode(props) {
    const node = this.node;

    setValue.call(node, 'rectangle', props.rectangle);
    mountNode(node, props);

    return node;
  },
  updateNode(prevProps, props) {
    const node = this.node;

    updateValue.call(node, 'rectangle', prevProps.rectangle, props.rectangle);
    updateNode(node, prevProps, props);
  },

});

export class Image extends React.PureComponent {
  static propTypes = {
    file: PropTypes.string,
    dataUri: PropTypes.string,
    rect: PropTypes.arrayOf(PropTypes.number),
    ...pixiPropTypes,
  };
  render() {
    return React.createElement(RawImage, this.props, this.props.children);
  }
}
