/**
 * 搜索页
 * @邠心vbe on 2021/04/12
 */
import React, { Component } from 'react';
import { View, Text, StyleSheet, TextInput, FlatList, Image } from 'react-native';
import apiStation from '../../api/apiStation';
import utils from '../../utils/utils';
import { PageList } from '../Router';
import ListView from './ListView';

export default class Search extends Component {
  constructor(props) {
    super(props);
    this.state = {
      isSearch: false,
      searchResult: [{id:0}]
    };
  }

  componentDidMount() {
    this.getGeoLocation();
  }

  getGeoLocation() {
    navigator.geolocation.getCurrentPosition(location => {
      let latlng = {
        lat: location.coords.latitude,
        lng: location.coords.longitude
      }
      this.searchStation(latlng);
    }, error => {
      console.warn("getGeoLocation", error);
    });
  }

  searchStation(latlng) {
    this.setState({
      isSearch: true
    });
    latlng.siteName = this.searchWorld
    apiStation.searchStation(latlng).then(res => {
      if (res.data.sites) {
        const list = [];
        res.data.sites.forEach(item => {
          list.push({
            id: item.sitePk,
            name: item.siteName,
            address: item.siteAddress,
            latitude: item.locationLatitude,
            longitude: item.locationLongitude,
            acConnector: item.acConnector,
            allConnector: item.allConnector,
            dcConnector: item.dcConnector,
            siteType: item.siteType,
            distance: utils.getDistance(item.distance),
            serviceProvider: item.serviceProvider
          });
        });
        this.setState({
          isSearch: false,
          searchResult: list
        });
      }
    }).catch(err => {
      console.log('err', err);
      this.setState({
        isSearch: false,
        searchResult: []
      });
    });
  }

  intoStation(info) {
    startPage(PageList.chargeDetail, {stationInfo: info, action: 'search'});
  }

  listItem = (props) => {
    return <ListView {...props} onPress={() => this.intoStation(props.item)}/>
  }

  render() {
    return (
      <View style={styles.container}>
        <View style={styles.searchView}>
          <Feather
            name={'search'}
            size={20}
            color={'#999'}/>
          <TextInput
            style={styles.searchInput}
            autoFocus={true}
            maxLength={50}
            numberOfLines={1}
            returnKeyType={'search'}
            clearButtonMode={'while-editing'}
            placeholder='Search using site name or service provider'
            placeholderTextColor={textPlacehoder}
            onChangeText={text => {
              this.searchWorld = text;
            }}
            onSubmitEditing={() => {
              this.getGeoLocation();
            }}/>
        </View>
        { this.state.isSearch
        ? <View style={styles.searchingView}>
            <Image
              style={styles.seachingIcon}
              source={require('../../images/icon/loading.gif')}/>
          </View>
        : <FlatList
            style={styles.listView}
            data={this.state.searchResult}
            renderItem={this.listItem}
            keyExtractor={item => item.id}
            ListEmptyComponent={<Text style={styles.noResult}>No search result</Text>}
          />
        }
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: colorLight
  },
  searchView: {
    marginTop: 16,
    marginLeft: 16,
    marginRight: 16,
    marginBottom: 8,
    paddingLeft: 16,
    paddingRight: 16,
    borderRadius: 60,
    borderWidth: 1,
    borderColor: '#E5E5E5',
    alignItems: 'center',
    flexDirection: 'row',
    backgroundColor: '#F5F5F5'
  },
  searchInput: {
    flex: 1,
    color: textPrimary,
    ...$padding(6, 8),
    fontSize: 15,
    marginLeft: 4,
    lineHeight: 20
  },
  searchingView: {
    padding: 16,
    alignItems: 'center'
  },
  seachingIcon: {
    width: 60,
    height: 60
  },
  noResult: {
    color: '#999',
    fontSize: 14,
    padding: 20,
    textAlign: 'center',
  },
  listView: {
    flex: 1
  },
  itemView: {
    alignItems: 'center',
    flexDirection: 'row',
    borderBottomWidth: 1,
    borderBottomColor: '#eee'
  },
  stationInfo: {
    flex: 1,
    padding: 16
  },
  nameView: {
    paddingTop: 3,
    alignItems: 'center',
    flexDirection: 'row'
  },
  stationName: {
    color: textPrimary,
    fontSize: 18,
    fontWeight: 'bold'
  },
  stationAddress: {
    color: '#666',
    fontSize: 14,
    paddingBottom: 8
  },
  infoStatus: {
    fontSize: 10,
    paddingTop: 3,
    paddingLeft: 8,
    paddingRight: 8,
    paddingBottom: 3,
    borderRadius: 5,
    marginLeft: 12,
  },
  selected: {
    color: textPrimary,
    backgroundColor: colorAccent
  },
  available: {
    color: textLight,
    backgroundColor: '#90DB0A'
  },
  unavailable: {
    color: '#999',
    fontSize: 10.5,
    paddingTop: 7,
    paddingLeft: 9,
    paddingRight: 9,
    paddingBottom: 7,
    backgroundColor: '#CCC'
  },
  connectView: {
    paddingTop: 4,
    paddingBottom: 4,
    alignItems: 'center',
    flexDirection: 'row'
  },
 
  
  directView: {
    zIndex: 1,
    paddingTop: 4,
    paddingRight: 16,
    alignItems: 'center'
  },
  distanceText: {
    color: textPrimary,
    fontSize: 12,
    paddingTop: 2
  },
});