import React from 'react'
import { Button, Glyphicon, Alert } from 'react-bootstrap'
import SectionLayout from './section_layout'
import IMAPButton from './imap_button'
import Account from 'models/account'
import Spinner from 'components/spinner'
import bitmask from 'lib/bitmask'
const GENERAL_NOTICES = [
  "KEYMANAGER_KEY_FOUND",  // (address)
  "KEYMANAGER_KEY_NOT_FOUND",  // (address)
  "KEYMANAGER_LOOKING_FOR_KEY",  // (address)
  "KEYMANAGER_DONE_UPLOADING_KEYS",  // (address)
  "SMTP_START_ENCRYPT_AND_SIGN",  // (from_addr)
  "SMTP_END_ENCRYPT_AND_SIGN",  // (from_addr)
  "SMTP_START_SIGN",  // (from_addr)
  "SMTP_END_SIGN",  // (from_addr)
  "SMTP_SEND_MESSAGE_START",  // (from_addr)
  "SMTP_SEND_MESSAGE_SUCCESS"  // (from_addr)
]
const ACCOUNT_NOTICES = [
  "IMAP_CLIENT_LOGIN",  // (username)
  "MAIL_FETCHED_INCOMING",  // (userid)
  "MAIL_MSG_DECRYPTED",  // (userid)
  "MAIL_MSG_DELETED_INCOMING",  // (userid)
  "MAIL_MSG_PROCESSING",  // (userid)
  "MAIL_MSG_SAVED_LOCALLY",  // (userid)
  "SMTP_RECIPIENT_ACCEPTED_ENCRYPTED",  // (userid, dest)
  "SMTP_RECIPIENT_ACCEPTED_UNENCRYPTED",  // (userid, dest)
  "SMTP_RECIPIENT_REJECTED",  // (userid, dest)
  "SMTP_SEND_MESSAGE_ERROR"  // (userid, dest)
]
const STATUSES = [
  "KEYMANAGER_FINISHED_KEY_GENERATION",  // (address)
  "KEYMANAGER_STARTED_KEY_GENERATION",  // (address)
  "SMTP_SERVICE_STARTED",
  "MAIL_UNREAD_MESSAGES",  // (userid, number)
  "IMAP_SERVICE_STARTED"
]
const STATUS_ERRORS = [
  "IMAP_SERVICE_FAILED_TO_START",
  "IMAP_UNHANDLED_ERROR",
  "SMTP_SERVICE_FAILED_TO_START",
  "SMTP_CONNECTION_LOST",  // (userid, dest)
]
export default class EmailSection extends React.Component {
  static get defaultProps() {return{
    account: null
  }}
  constructor(props) {
    super(props)
    this.state = {
      status: 'unknown', // on, off, unknown, wait, disabled, error
      messages: [],
      expanded: true
    }
    this.expand    = this.expand.bind(this)
    this.openKeys  = this.openKeys.bind(this)
    this.openApp   = this.openApp.bind(this)
    this.openPrefs = this.openPrefs.bind(this)
    this.logEvent  = this.logEvent.bind(this)
  }
  componentWillMount() {
    let events = [].concat(GENERAL_NOTICES, ACCOUNT_NOTICES, STATUSES, STATUS_ERRORS)
    for (let event of events) {
      bitmask.events.register(event, this.logEvent)
    }
    bitmask.mail.status().then(status => {
      // either 'running' or 'disabled'
      let newstatus = 'error'
      if (status['mail'] == 'running') {
        newstatus = 'on'
      } else if (status['mail'] == 'disabled') {
        newstatus = 'disabled'
      }
      this.setState({status: newstatus})
    })
  }
  logEvent(event, msg) {
    console.log("EVENT: " + event, msg)
  }
  openKeys() {}
  openApp() {}
  openPrefs() {}
  expand() {
    this.setState({expanded: !this.state.expanded})
  }
  render () {
    //let message = null
    //if (this.state.error) {
    //  // style may be: success, warning, danger, info
    //  message = (
    //