import React, { Component } from "react";

import './App.scss';

const backendUrl = "https://kucinakobackend.ichigo.everydayimshuflin.com";

function makeRequest(queryString, jsonHandler) {
  const effectiveUrl = `${backendUrl}/${queryString}`
  fetch(`${effectiveUrl}`)
    .then((resp) => {
      return resp.json()
    })
    .then((json) => {
      jsonHandler(json);
    });
}

function testHandler(json) {
  console.log("JSON");
  console.log(json);
}

class Results extends Component {
  constructor(props) {
    super(props);
    this.content = this.content.bind(this);
  }

  content() {
    const header = (
      <div className="searchResultHeader">
        Searched for <b>{ this.props.searchTerm }</b> search type: { this.props.searchType }
      </div>);
    const entries = this.props.searchResults.map((entry, idx) => {
      return (<div className="searchResult" key={ entry.id }>
        <b>{ entry.sai }</b> - { entry.eng }
        <br />
        <span className="synclass">{ entry.syn_category }</span>
        <br />
        Type: { entry.morph_type }
      </div>);
    });
    return [header].concat(entries);
  }

  render() {
    const results = this.props.searchResults;
    return(
      <div className='results'>
        { results ? this.content() : "No results" } 
      </div>
    );
  }
}

class App extends Component {
  constructor(props) {
    super(props);
    this.input = React.createRef();
    this.searchEng = this.searchEng.bind(this);
    this.searchSaimiar = this.searchSaimiar.bind(this);

    this.state = {
      searchResults: null,
      searchType: null,
      searchTerm: null
    };
  }

  searchSaimiar(evt) {
    const searchTerm = this.input.current.value;
    const request = `saimiar?sai=like.*${searchTerm}*`
    makeRequest(request, (json) => {
      const searchResults = json.length === 0 ? null : json;
      this.setState({ searchResults, searchType: "saimiar", searchTerm });
    });
  }

  searchEng(evt) {
    const searchTerm = this.input.current.value;
    const request = `saimiar?eng=like.*${searchTerm}*`
    makeRequest(request, (json) => {
      const searchResults = json.length === 0 ? null : json;
      this.setState({ searchResults, searchType: "eng-saimiar", searchTerm });
    });
  }

  render() {
    return(
      <main>
        <div className='container'>
          <div className='search'>
            <h1>Kucinako</h1>
            <div className='textInput'>
                <input className='textInput' type="text" ref={ this.input } />
            </div>
            <br/>
            <button onClick={ this.searchSaimiar } className="searchButton">Saimiar</button>
            <button onClick={ this.searchEng } className="searchButton">English</button>
          </div>
        </div>
        <Results
          searchResults={ this.state.searchResults }
          searchTerm= { this.state.searchTerm }
          searchType={ this.state.searchType }
        />
      </main>
    );
  }
}



export default App;
