import React, { Component, useState } from "react";
import { Button, Form, Icon, Header, Modal, Input } from "semantic-ui-react";
import { connect } from "react-redux";
import { RemoteService } from "../../../remote";

const DeleteModal = (props) => (
  <Modal
    trigger={
      <Button icon labelPosition="left" inverted color="red">
        <Icon name="trash alternate" />
        Delete device
      </Button>
    }
    closeIcon
  >
    <Header icon="archive" content="Are you sure ?" />
    <Modal.Actions>
      <Button color="red">
        <Icon name="remove" /> No
      </Button>
      <Button onClick={() => props.removeDevice()} color="green">
        <Icon name="checkmark" /> Yes
      </Button>
    </Modal.Actions>
  </Modal>
);

const SettingsForm = (props) => {
  const handleInputChange = (e) => {
    const { name, value } = e.target;
    setValues({ ...values, [name]: value });
  };

  const [values, setValues] = useState({ name: "" });

  return (
    <Form>
      <Form.Field>
        <label>Edit Name: </label>
        <Input
          autoComplete="off"
          name="name"
          onChange={handleInputChange}
          placeholder={props.name}
        />
      </Form.Field>
      <Form.Field>
        <DeleteModal removeDevice={() => props.removeDevice(values)} />
      </Form.Field>
      <Button
        onClick={() => props.saveFunction(values)}
        color="green"
        type="submit"
      >
        <Icon name="checkmark" />
        Save changes
      </Button>
    </Form>
  );
};

class DeviceSettingsModal extends Component {
  constructor(props) {
    super(props);
    this.state = {
      open: false,
      name: this.props.device.name,
    };

    this.updateDevice = this.updateDevice.bind(this);
    this.deleteDevice = this.deleteDevice.bind(this);
    //this.useExternalTempSensor = this.useExternalTempSensor.bind(this);
  }

  closeModal = (e) => {
    this.setState({ openModal: false });
  };

  openModal = (e) => {
    this.setState({ openModal: true });
  };

  updateDevice(values) {
    console.log(values, this.external);
    let name = values.name;
    if (values.name.length === 0) {
      name = this.props.device.name;
    }

    let data = {
      ...this.props.device,
      name: name,
    };

    if (this.props.device.kind === "thermostat") {
      let external = values.external
        ? values.external
        : this.props.device.useExternalSensors;
      console.log(external);
      data.useExternalSensors = external;
    }
    console.log(data.useExternalSensors);
    this.props
      .saveDevice(data)
      .then(() => this.setState({ openModal: false }))
      .catch((err) =>
        console.error(
          `settings modal for device ${this.props.id} deletion error`,
          err
        )
      );
  }

  deleteDevice() {
    this.props
      .deleteDevice(this.props.device)
      .then(() => this.setState({ openModal: false }))
      .catch((err) =>
        console.error(
          `settings modal for device ${this.props.id} deletion error`,
          err
        )
      );
  }

  _editForm = null;
  get editForm() {
    this._editForm = this._editForm || (
      <SettingsForm
        name={this.state.name}
        removeDevice={this.deleteDevice}
        saveFunction={this.updateDevice}
        tempSensor={this.useExternalTempSensor}
      />
    );
    return this._editForm;
  }

  render() {
    return (
      <Modal closeIcon onClose={this.closeModal} open={this.state.openModal}>
        <Modal.Header>Settings of {this.props.device.name}</Modal.Header>
        <Modal.Content>{this.editForm}</Modal.Content>
      </Modal>
    );
  }
}

const mapStateToProps = (state, ownProps) => ({
  device: state.devices[ownProps.id],
});
const DeviceSettingsModalContainer = connect(
  mapStateToProps,
  RemoteService,
  null,
  { forwardRef: true }
)(DeviceSettingsModal);
export default DeviceSettingsModalContainer;