/**
 A smart plug is a plug that has a boolean internal state, i.e., that can be turned on or off, either with the
 SmartHut interface or by a switch.
 The smart plug also stores the total energy consumed while the plug is active, in terms of kilowatt-hours 2(kWh) .
 The user can reset this value.
 **/
import React, { Component } from "react";
import { BottomPanel, StyledDiv } from "./styleComponents";
import { Image } from "semantic-ui-react";
import {
  energyConsumedStyle,
  imageStyle,
  kwhStyle,
  nameStyle,
} from "./SmartPlugStyle";
import { RemoteService } from "../../../remote";
import { connect } from "react-redux";

class SmartPlug extends Component {
  constructor(props) {
    super(props);
    this.iconOn = "/img/smart-plug.svg";
    this.iconOff = "/img/smart-plug-off.svg";
  }

  get turnedOn() {
    return this.props.stateOrDevice.on;
  }

  get energyConsumed() {
    return (this.props.stateOrDevice.totalConsumption / 1000).toFixed(3);
  }

  onClickDevice = () => {
    const on = !this.turnedOn;
    if (this.props.tab === "Devices") {
      this.props
        .saveDevice({ ...this.props.stateOrDevice, on })
        .catch((err) => console.error("smart plug update error", err));
    } else {
      this.props.updateState(
        { id: this.props.stateOrDevice.id, on: on },
        this.props.stateOrDevice.kind
      );
    }
  };

  getIcon = () => {
    return this.turnedOn ? this.iconOn : this.iconOff;
  };

  render() {
    return (
      <StyledDiv onClick={this.onClickDevice}>
        <Image src={this.getIcon()} style={imageStyle} />
        <span style={nameStyle}>Smart Plug</span>

        <BottomPanel
          style={
            this.turnedOn
              ? { backgroundColor: "#505bda" }
              : { backgroundColor: "#1a2849" }
          }
        >
          <span style={energyConsumedStyle}>{this.energyConsumed}</span>
          <span style={kwhStyle}>KWh</span>
        </BottomPanel>
      </StyledDiv>
    );
  }
}

const mapStateToProps = (state, ownProps) => ({
  get stateOrDevice() {
    if (state.active.activeTab === "Devices") {
      return state.devices[ownProps.id];
    } else {
      return state.sceneStates[ownProps.id];
    }
  },
});
const SmartPlugContainer = connect(mapStateToProps, RemoteService)(SmartPlug);
export default SmartPlugContainer;