import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import classnames from 'classnames';
import { getParam } from '@/utils';
import { addCountryNum } from './countryRedux';
import { HeaderBar } from '@/common'

import './index.scss';

class Country extends Component {

  constructor(props) {
    super(props);
    this.state = {
      currentNav: 'A',
      data: [
        {
          type: '0',
          list: [
            {
              name: '中国大陆',
              num: '86'
            },
            {
              name: '美国',
              num: '1'
            },
            {
              name: '日本',
              num: '81'
            },
            {
              name: '中国香港',
              num: '852'
            },
            {
              name: '中国澳门',
              num: '853'
            },
            {
              name: '中国台湾',
              num: '886'
            },
            {
              name: '澳大利亚',
              num: '61'
            },
            {
              name: '加拿大',
              num: '1'
            },
            {
              name: '英国',
              num: '44'
            },
            {
              name: '新西兰',
              num: '64'
            },
          ]
        },
        {
          type: 'A',
          list: [
            {
              name: '阿富汗',
              num: '93'
            },
            {
              name: '阿尔巴尼亚',
              num: '355'
            },
            {
              name: '阿尔及利亚',
              num: '213'
            },
            {
              name: '安道尔',
              num: '376'
            },
            {
              name: '安哥拉',
              num: '244'
            },
            {
              name: '安圭拉',
              num: '1264'
            },
            {
              name: '安提瓜和巴布达',
              num: '1268'
            },
            {
              name: '阿根廷',
              num: '54'
            },
            {
              name: '阿鲁巴',
              num: '297'
            },
            {
              name: '阿塞拜疆',
              num: '994'
            },
            {
              name: '埃及',
              num: '20'
            },
            {
              name: '爱沙尼亚',
              num: '372'
            },
            {
              name: '埃塞俄比亚',
              num: '251'
            },
            {
              name: '爱尔兰',
              num: '353'
            },
            {
              name: '阿曼',
              num: '968'
            },
            {
              name: '阿拉伯联合酋长国',
              num: '971'
            },
            {
              name: '爱沙尼亚',
              num: '372'
            }
          ]
        },
        {
          type: 'B',
          list: [
            {
              name: '巴哈马',
              num: '1242'
            },
            {
              name: '巴林',
              num: '973'
            },
            {
              name: '巴巴多斯',
              num: '1246'
            },
            {
              name: '白俄罗斯',
              num: '375'
            },
            {
              name: '比利时',
              num: '32'
            },
            {
              name: '伯利兹',
              num: '501'
            },
            {
              name: '贝宁',
              num: '229'
            },
            {
              name: '百慕大群岛',
              num: '1441'
            },
            {
              name: '不丹',
              num: '975'
            },
            {
              name: '玻利维亚',
              num: '591'
            },
            {
              name: '波斯尼亚和黑塞哥维那',
              num: '387'
            },
            {
              name: '博茨瓦纳',
              num: '267'
            },
            {
              name: '巴西',
              num: '55'
            },
            {
              name: '保加利亚',
              num: '359'
            },
            {
              name: '布基纳法索',
              num: '226'
            },
            {
              name: '布隆迪',
              num: '257'
            },
            {
              name: '冰岛',
              num: '354'
            },
            {
              name: '巴基斯坦',
              num: '92'
            },
            {
              name: '巴勒斯坦',
              num: '970'
            },
            {
              name: '巴拿马',
              num: '507'
            },
            {
              name: '巴布亚新几内亚',
              num: '675'
            },
            {
              name: '巴拉圭',
              num: '51'
            },
            {
              name: '秘鲁',
              num: '354'
            },
            {
              name: '波兰',
              num: '48'
            },
            {
              name: '波多黎各',
              num: '1787'
            }
          ]
        },
        {
          type: 'C',
          list: [
            {
              name: '赤道几内亚',
              num: '240'
            }
          ]
        },
        {
          type: 'D',
          list: [
            {
              name: '丹麦',
              num: '45'
            },
            {
              name: '多米尼加',
              num: '1767'
            },
            {
              name: '多米尼加共和国',
              num: '1809'
            },
            {
              name: '德国',
              num: '49'
            },
            {
              name: '东帝汶',
              num: '670'
            },
            {
              name: '多哥',
              num: '228'
            }
          ]
        },
        {
          type: 'E',
          list: [
            {
              name: '厄瓜多尔',
              num: '593'
            },
            {
              name: '厄立特里亚',
              num: '291'
            },
            {
              name: '俄罗斯',
              num: '7'
            }
          ]
        },
        {
          type: 'F',
          list: [
            {
              name: '法罗群岛',
              num: '298'
            },
            {
              name: '斐济',
              num: '679'
            },
            {
              name: '芬兰',
              num: '358'
            },
            {
              name: '法国',
              num: '594'
            },
            {
              name: '法属圭亚那',
              num: '45'
            },
            {
              name: '法属波利尼西亚',
              num: '689'
            },
            {
              name: '菲律宾',
              num: '63'
            }
          ]
        },
        {
          type: 'G',
          list: [
            {
              name: '哥伦比亚',
              num: '57'
            },
            {
              name: '哥斯达黎加',
              num: '506'
            },
            {
              name: '古巴',
              num: '53'
            },
            {
              name: '刚果民主共和国',
              num: '243'
            },
            {
              name: '冈比亚',
              num: '220'
            },
            {
              name: '格鲁吉亚',
              num: '995'
            },
            {
              name: '格陵兰岛',
              num: '299'
            },
            {
              name: '格林纳达',
              num: '1473'
            },
            {
              name: '瓜德罗普岛',
              num: '590'
            },
            {
              name: '关岛',
              num: '299'
            },
            {
              name: '瓜地马拉',
              num: '502'
            },
            {
              name: '圭亚那',
              num: '592'
            },
            {
              name: '刚果共和国',
              num: '242'
            }
          ]
        },
        {
          type: 'H',
          list: [
            {
              name: '海地',
              num: '509'
            },
            {
              name: '洪都拉斯',
              num: '504'
            },
            {
              name: '黑山',
              num: '382'
            },
            {
              name: '荷兰',
              num: '31'
            },
            {
              name: '韩国',
              num: '82'
            }
          ]
        },
        {
          type: 'J',
          list: [
            {
              name: '加拿大',
              num: '1'
            },
            {
              name: '日本',
              num: '81'
            },
            {
              name: '柬埔寨',
              num: '855'
            },
            {
              name: '捷克',
              num: '420'
            },
            {
              name: '吉布提',
              num: '253'
            },
            {
              name: '加蓬',
              num: '241'
            },
            {
              name: '加纳',
              num: '233'
            },
            {
              name: '几内亚',
              num: '224'
            },
            {
              name: '几内亚比绍共和国',
              num: '245'
            },
            {
              name: '基里巴斯',
              num: '686'
            },
            {
              name: '吉尔吉斯斯坦',
              num: '996'
            },
            {
              name: '津巴布韦',
              num: '263'
            }
          ]
        },
        {
          type: 'K',
          list: [
            {
              name: '喀麦隆',
              num: '237'
            },
            {
              name: '开普',
              num: '238'
            },
            {
              name: '开曼群岛',
              num: '1345'
            },
            {
              name: '科摩罗',
              num: '269'
            },
            {
              name: '库克群岛',
              num: '682'
            },
            {
              name: '克罗地亚',
              num: '385'
            },
            {
              name: '库拉索',
              num: '599'
            },
            {
              name: '肯尼亚',
              num: '254'
            },
            {
              name: '科威特',
              num: '965'
            },
            {
              name: '卡塔尔',
              num: '974'
            },
            {
              name: '科特迪瓦',
              num: '225'
            }
          ]
        },
        {
          type: 'L',
          list: [
            {
              name: '老挝',
              num: '856'
            },
            {
              name: '拉脱维亚',
              num: '371'
            },
            {
              name: '黎巴嫩',
              num: '961'
            },
            {
              name: '莱索托',
              num: '266'
            },
            {
              name: '利比里亚',
              num: '231'
            },
            {
              name: '利比亚',
              num: '218'
            },
            {
              name: '列支敦士登',
              num: '423'
            },
            {
              name: '立陶宛',
              num: '370'
            },
            {
              name: '卢森堡',
              num: '352'
            },
            {
              name: '留尼汪',
              num: '262'
            },
            {
              name: '罗马尼亚',
              num: '40'
            },
            {
              name: '卢旺达',
              num: '423'
            }
          ]
        },
        {
          type: 'M',
          list: [
            {
              name: '美属萨摩亚',
              num: '1684'
            },
            {
              name: '孟加拉国',
              num: '880'
            },
            {
              name: '马其顿',
              num: '389'
            },
            {
              name: '马达加斯加',
              num: '261'
            },
            {
              name: '马拉维',
              num: '265'
            },
            {
              name: '马来西亚',
              num: '60'
            },
            {
              name: '马尔代夫',
              num: '960'
            },
            {
              name: '马里',
              num: '223'
            },
            {
              name: '马耳他',
              num: '356'
            },
            {
              name: '马提尼克',
              num: '596'
            },
            {
              name: '毛里塔尼亚',
              num: '222'
            },
            {
              name: '毛里求斯',
              num: '230'
            },
            {
              name: '墨西哥',
              num: '52'
            },
            {
              name: '摩尔多瓦',
              num: '373'
            },
            {
              name: '摩纳哥',
              num: '377'
            },
            {
              name: '蒙古',
              num: '976'
            },
            {
              name: '蒙特塞拉特岛',
              num: '1664'
            },
            {
              name: '摩洛哥',
              num: '212'
            },
            {
              name: '莫桑比克',
              num: '258'
            },
            {
              name: '缅甸',
              num: '95'
            },
            {
              name: '美属维尔京群岛',
              num: '1284'
            }
          ]
        },
        {
          type: 'N',
          list: [
            {
              name: '纳米比亚',
              num: '264'
            },
            {
              name: '尼泊尔',
              num: '977'
            },
            {
              name: '尼加拉瓜',
              num: '505'
            },
            {
              name: '尼日尔',
              num: '227'
            },
            {
              name: '尼日利亚',
              num: '234'
            },
            {
              name: '挪威',
              num: '47'
            },
            {
              name: '南非',
              num: '27'
            }
          ]
        },
        {
          type: 'O',
          list: [
            {
              name: '澳大利亚',
              num: '61'
            },
            {
              name: '奥地利',
              num: '43'
            }
          ]
        },
        {
          type: 'P',
          list: [
            {
              name: '帕劳',
              num: '680'
            },
            {
              name: '葡萄牙',
              num: '351'
            }
          ]
        },
        {
          type: 'R',
          list: [
            {
              name: '瑞典',
              num: '46'
            },
            {
              name: '瑞士',
              num: '41'
            }
          ]
        },
        {
          type: 'S',
          list: [
            {
              name: '塞浦路斯',
              num: '357'
            },
            {
              name: '萨尔瓦多',
              num: '503'
            },
            {
              name: '圣基茨和尼维斯',
              num: '1869'
            },
            {
              name: '圣露西亚',
              num: '1758'
            },
            {
              name: '圣皮埃尔岛及密克隆岛',
              num: '508'
            },
            {
              name: '圣文森特和格林纳丁斯',
              num: '1784'
            },
            {
              name: '萨摩亚',
              num: '685'
            },
            {
              name: '圣马力诺',
              num: '378'
            },
            {
              name: '圣多美和普林西比',
              num: '239'
            },
            {
              name: '沙特阿拉伯',
              num: '966'
            },
            {
              name: '塞内加尔',
              num: '221'
            },
            {
              name: '塞尔维亚',
              num: '381'
            },
            {
              name: '塞舌尔',
              num: '248'
            },
            {
              name: '塞拉利昂',
              num: '239'
            },
            {
              name: '圣马丁岛(荷兰部分)',
              num: '1721'
            },
            {
              name: '斯洛伐克',
              num: '421'
            },
            {
              name: '斯洛文尼亚',
              num: '386'
            },
            {
              name: '所罗门群岛',
              num: '677'
            },
            {
              name: '索马里',
              num: '252'
            },
            {
              name: '斯里兰卡',
              num: '94'
            },
            {
              name: '苏丹',
              num: '249'
            },
            {
              name: '苏里南',
              num: '597'
            },
            {
              name: '斯威士兰',
              num: '268'
            }
          ]
        },
        {
          type: 'T',
          list: [
            {
              name: '塔吉克斯坦',
              num: '992'
            },
            {
              name: '坦桑尼亚',
              num: '255'
            },
            {
              name: '泰国',
              num: '66'
            },
            {
              name: '汤加',
              num: '676'
            },
            {
              name: '特立尼达和多巴哥',
              num: '1868'
            },
            {
              name: '突尼斯',
              num: '216'
            },
            {
              name: '土耳其',
              num: '90'
            },
            {
              name: '土库曼斯坦',
              num: '993'
            },
            {
              name: '特克斯和凯科斯群岛',
              num: '1649'
            }
          ]
        },
        {
          type: 'W',
          list: [
            {
              name: '文莱',
              num: '673'
            },
            {
              name: '乌干达',
              num: '256'
            },
            {
              name: '乌克兰',
              num: '380'
            },
            {
              name: '乌拉圭',
              num: '598'
            },
            {
              name: '乌兹别克斯坦',
              num: '998'
            },
            {
              name: '瓦努阿图',
              num: '678'
            },
            {
              name: '委内瑞拉',
              num: '58'
            }
          ]
        },
        {
          type: 'X',
          list: [
            {
              name: '新西兰',
              num: '64'
            },
            {
              name: '希腊',
              num: '30'
            },
            {
              name: '匈牙利',
              num: '36'
            },
            {
              name: '新喀里多尼亚',
              num: '687'
            },
            {
              name: '新加坡',
              num: '65'
            },
            {
              name: '西班牙',
              num: '34'
            },
            {
              name: '叙利亚',
              num: '963'
            },
            {
              name: '亚美尼亚',
              num: '374'
            }
          ]
        },
        {
          type: 'Y',
          list: [
            {
              name: '英国',
              num: '44'
            },
            {
              name: '印度',
              num: '91'
            },
            {
              name: '印度尼西亚',
              num: '62'
            },
            {
              name: '伊朗',
              num: '98'
            },
            {
              name: '伊拉克',
              num: '964'
            },
            {
              name: '以色列',
              num: '972'
            },
            {
              name: '意大利',
              num: '39'
            },
            {
              name: '牙买加',
              num: '1876'
            },
            {
              name: '约旦',
              num: '962'
            },
            {
              name: '越南',
              num: '84'
            },
            {
              name: '英属处女群岛',
              num: '1340'
            },
            {
              name: '也门',
              num: '967'
            }
          ]
        },
        {
          type: 'Z',
          list: [
            {
              name: '中国',
              num: '86'
            },
            {
              name: '中国香港',
              num: '852'
            },
            {
              name: '中国澳门',
              num: '853'
            },
            {
              name: '中国台湾',
              num: '886'
            },
            {
              name: '中非共和国',
              num: '236'
            },
            {
              name: '乍得',
              num: '235'
            },
            {
              name: '智利',
              num: '56'
            },
            {
              name: '直布罗陀',
              num: '350'
            },
            {
              name: '赞比亚',
              num: '260'
            }
          ]
        }
      ]
    }
  }

  componentDidMount() {
    // document.body.scrollIntoView();
    document.addEventListener('scroll', this.judgeCurrentPosition)
  }

  componentWillUnmount() {
    document.removeEventListener('scroll', this.judgeCurrentPosition)
  }

  judgeCurrentPosition = () => {
    const { data } = this.state;
    let top = document.documentElement.scrollTop || document.body.scrollTop;
    const lens = data.map(item => {
      let el = document.querySelector(`[data-type="${item['type']}"]`);
      if(el) {
        return el.offsetTop;
      }
      return '';
    });
    lens.map((item,index) => {
      if(item && top >= item) {
        this.setState({
          currentNav: data[index]['type']
        })
      } 
/*
      if(item && (top + 200) > item) {
        this.setState({
          currentNav: data[index]['type']
        })
      }
*/
    });
  }

  toParentPage = (e, num) => {
    const { history, addCountryNum } = this.props;
    addCountryNum({
      num,
      code: getParam('share_code'),
      from: getParam('from')
    });
    // history.push(`/detail?id=${getParam('id')}`);
    history.go(-1)
    e.preventDefault();
  }

  scrollTo = (param) => {
    const el = document.querySelector(`[data-type="${param}"]`)
    if(el) {
      this.setState({
        currentNav: param
      });
      window.scrollTo({left: 0, top: el.offsetTop, behavior: 'smooth'})
/*
      el.scrollIntoView({
        behavior: 'smooth'
      });
*/
    }
  }

  render() {
  const { currentNav, data } = this.state;
  return (
      <>
        <HeaderBar title="选择国家和地区" arrow={true}/>
        <ul className="letter-nav">
          {data.map(item => {
            return (
              <li 
                key={`nav-${item['type']}`}
                className={classnames("letter-nav__item", {"letter-nav__item--active": currentNav === item['type']})}
                onClick={() => this.scrollTo(item['type'])}
                >{item['type'] === '0' ? '常' : item['type']}</li>
            )
          })}
        </ul>
        <div className="page-body">
            {data.map(({type, list}, index) => {
              return (
                <div key={index}>
                  <h2 className="country-header" data-type={type}>{type === '0'? '常用' : type}</h2>
                  <ul className="country-list">
                    {list.map((val, key) => {
                      return (
                        <li className="country-item" key={`${index}-${key}`}>
                          <a className="country-item__link" href="#" onClick={(e) => this.toParentPage(e, val.num)}>
                            <span className="country-name">{val.name}</span>
                            <span className="country-num">+{val.num}</span>
                          </a>
                        </li>
                      )
                    })}
                    
                  </ul>
                </div>
              )
            })}
        </div>
      </>
    )
  }
}

export default connect(
  ({country}) =>({
    country
  }),
  (dispatch) => {
    return bindActionCreators(
      {
        addCountryNum
      },
      dispatch
    );
  }
)(Country);