//
//  XinZengDiZhiViewController.swift
//  GeliBusinessPlatform
//
//  Created by junye lu on 2020/4/26.
//  Copyright © 2020 junye lu. All rights reserved.
//

import UIKit
import SwiftyJSON
protocol XinZengDiZhiViewControllerDelegate {
    func XinZengDiZhiViewControllerFinishAction(name:String,phone:String,adr:String, data: AddAddressDataModel?,province_name:String,city_name:String,district_name:String)
}
class XinZengDiZhiViewController: BaseViewController,UITableViewDelegate,UITableViewDataSource,TitleAndTFAndBtnCellDelegate, UIPickerViewDelegate, UIPickerViewDataSource,SJMapViewControllerDelegate,UITextFieldDelegate,TitleAndSwitchCellDelegate,GeliAlertViewDelegate{
    var address_id:Int?
    func sureGeliAlertViewAction(sender: UIButton) {
        let UserToken = UserDefaults.standard.value(forKey: "user_token")
        if sender.tag == 999 {
            
            AddressDel(["user_token":UserToken as Any,"address_id":address_id as Any], success: { (data) in
                self.delegate?.XinZengDiZhiViewControllerFinishAction(name: self.nameStr, phone: self.phone, adr: self.adrStr, data: nil,province_name:"",city_name:"",district_name:"")
                self.navigationController?.popViewController(animated: true)
            }) { (error) in
                
            }
            return
        }
        HUD.flash(.progress)
        
        let proDict = addressArray[provinceIndex] as! Dictionary<String,Any>
        var cityDict:Dictionary<String,Any> = Dictionary()
        var areaDict:Dictionary<String,Any> = Dictionary()
        cityDict["area_id"] = ""
        areaDict["area_id"] = ""
        cityDict["area_name"] = ""
        areaDict["area_name"] = ""
        
        if (proDict["city_list"] as! NSArray).count > 0 {
            cityDict = (proDict["city_list"] as! NSArray)[cityIndex] as! Dictionary<String, Any>
            if (cityDict["district_list"] as! NSArray).count > 0 {
                areaDict = (cityDict["district_list"] as! NSArray)[areaIndex] as! Dictionary<String,Any>
            }
        }
        
        
        var defalut = 0
        if is_default {
            defalut = 1
        }
        var send_default = 0
        if is_send_default {
            send_default = 1
        }
        if navTitle == "编辑地址"{
            let dict = [
                "user_token":UserToken as Any,
                "address_id":address_id as Any,
                "consignee":nameStr as Any,
                "province":proDict["area_id"]! as Any,
                "city":cityDict["area_id"]! as Any,
                "district":areaDict["area_id"]! as Any,
                "street":0 as Any,
                "address":adrStr as Any,
                "mobile":phone as Any,
                "tel":tel as Any,
                "is_default":defalut as Any,
                "is_send_default":send_default as Any,
            ]
            EditAddress(dict, success: { (data) in
                self.delegate?.XinZengDiZhiViewControllerFinishAction(name: self.nameStr, phone: self.phone, adr: self.adrStr, data: nil,province_name:"",city_name:"",district_name:"")
                self.navigationController?.popViewController(animated: true)
                HUD.hide()
            }) { (error) in
                
            }
        }else{
            
            let dict = [
                "user_token":UserToken as Any,
                "consignee":nameStr as Any,
                "province":proDict["area_id"]! as Any,
                "city":cityDict["area_id"]! as Any,
                "district":areaDict["area_id"]! as Any,
                "street":0 as Any,
                
                "address":adrStr as Any,
                "mobile":phone as Any,
                "tel":tel as Any,
                "is_default":defalut as Any,
                "is_send_default":send_default as Any,
            ]
            AddAddress(dict, success: { (data) in
                let dataModel = data as! AddAddressModel
                self.delegate?.XinZengDiZhiViewControllerFinishAction(name: self.nameStr, phone: self.phone, adr: self.adrStr, data: dataModel.data,province_name:proDict["area_name"] as! String,city_name:cityDict["area_name"] as! String,district_name:areaDict["area_name"] as! String)
                self.navigationController?.popViewController(animated: true)
                HUD.hide()
            }) { (error) in
                
            }
        }
    }
    
    var delegate:XinZengDiZhiViewControllerDelegate?
    //选择的省索引
    var provinceIndex = 0
    //选择的市索引
    var cityIndex = 0
    //选择的区(县)索引
    var areaIndex = 0
    var adrStr = ""//详细地址
    var nameStr = ""//收货人
    var phone = ""//手机
    var tel = ""//电话
    var zip = ""//邮编
    var is_send_default = false//默认发货
    var is_default = false //默认收货
    
    let titleArr = ["收货人:","地址:","详细地址:","手机号:","电话:","邮编:"]
    var holderArr = ["请填写收货人姓名","请选择城市","请输入详细地址","请输入手机号","请输入电话","请输入邮编"]
    @IBOutlet weak var listView: UITableView!
    @IBAction func saveAction(_ sender: Any) {
        print("save ")
        if nameStr.count == 0{
            HUD.flash(.label("请填写收货人姓名"), delay: 1.2)
            return
        }
        if holderArr[1] == "请选择城市"{
            HUD.flash(.label("请选择城市"), delay: 1.2)
            return
        }
        if adrStr.count == 0 {
            HUD.flash(.label("请输入详细地址"), delay: 1.2)
            return
        }
        if  phone.count == 0{
            HUD.flash(.label("请输入手机号"), delay: 1.2)
            return
        }
        let alertView = GeliAlertView(frame: self.view.window!.bounds)
        alertView.delegate = self
        alertView.tishiLbl.text = ""
        if navTitle == "编辑地址"{
            alertView.titileLbl.text = "是否提交地址修改?"
        }else{
            alertView.titileLbl.text = "是否保存当前地址?"
        }
        alertView.rightBtn.setAttributedTitle(NSAttributedString(string: "确定"), for: .normal)
        self.view.window?.addSubview(alertView)
    }
    var pcdStr:String?
    var navTitle:String?
    
    func getIndex(){
        let path = Bundle.main.path(forResource: "address_new", ofType: "json")
        let url = URL(fileURLWithPath: path!)
        // 带throws的方法需要抛异常
        do {
            let data = try Data(contentsOf: url)
            let jsonData = JSON(data)
            print("地址文件数据",jsonData["data"])
            
            self.addressArray = jsonData["data"].arrayObject!
            if navTitle == "编辑地址" {
                for i in 0 ..< addressArray.count {
                    let item = addressArray[i] as! Dictionary<String,Any>
                    if item["area_id"] as! Int == provinceIndex {
                        let citys = item["city_list"] as! Array<Dictionary<String,Any>>
                        if citys.count == 0 {
                            provinceIndex = i
                        }
                        for j in 0 ..< citys.count {
                            let cItem = citys[j]
                            if cItem["area_id"] as! Int == cityIndex {
                                let districts = cItem["district_list"] as! Array<Dictionary<String,Any>>
                                if districts.count == 0 {
                                    cityIndex = j
                                }
                                for k in 0 ..< districts.count{
                                    let dItem = districts[k]
                                    if dItem["area_id"] as! Int == areaIndex{
                                        print("id === ",k,dItem["area_id"],areaIndex)
                                        provinceIndex = i
                                        cityIndex = j
                                        areaIndex = k
                                        break
                                    }
                                }
                            }
                        }
                    }else{
                        provinceIndex = 0
                        cityIndex = 0
                        areaIndex = 0
                    }
                }
            }
        } catch let error as Error? {
            print("读取本地数据出现错误!",error as Any)
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        getIndex()
        
        navbar.title = navTitle
        if navTitle == "编辑地址" {
            navbar.rightTitle = "删除"
            if pcdStr != nil {
                holderArr.insert(pcdStr!, at: 1)
                holderArr.remove(at: 2)
            }
            
        }
        self.view.addSubview(navbar)
        
        listView.separatorStyle = .none
        
        listView.snp.makeConstraints { (make) in
            make.top.equalTo(NavCGRect.height)
            make.left.right.equalTo(0)
            make.height.equalTo(418*glscale)
        }
        
        listView.isScrollEnabled = false
        listView.register(UINib(nibName: "TitleAndTFCell", bundle: nil), forCellReuseIdentifier: "TitleAndTFCell")
        listView.register(UINib(nibName: "TitleAndBtnCell", bundle: nil), forCellReuseIdentifier: "TitleAndBtnCell")
        listView.register(UINib(nibName: "TitleAndSwitchCell", bundle: nil), forCellReuseIdentifier: "TitleAndSwitchCell")
        listView.register(UINib(nibName: "TitleAndTFAndBtnCell", bundle: nil), forCellReuseIdentifier: "TitleAndTFAndBtnCell")
        // Do any additional setup after loading the view.
        
    }
    @objc func adrSelectFinish(sender:UIButton){
        
        var proName = ""
        var cityName = ""
        var areaName = ""
        let proDict = addressArray[provinceIndex] as! Dictionary<String,Any>
        proName = proDict["area_name"] as! String
        if (proDict["city_list"] as! NSArray).count > 0 {
            let cityDict = (proDict["city_list"] as! NSArray)[cityIndex] as! [String: AnyObject]
            cityName = cityDict["area_name"] as! String
            if (cityDict["district_list"] as! NSArray).count > 0 {
                let areaDict = (cityDict["district_list"] as! NSArray)[areaIndex] as! Dictionary<String,Any>
                areaName = areaDict["area_name"] as! String
            }
        }
        
        
        var selectAdr = proName
        if cityName.count > 0 {
            selectAdr = proName + "-" + cityName
            if areaName.count > 0 {
                selectAdr = proName + "-" + cityName + "-" + areaName
            }
        }
        
        holderArr.insert(selectAdr, at: 1)
        holderArr.remove(at: 2)
        bgBtn?.removeFromSuperview()
        btmView?.subviews.forEach({ (view) in
            view.removeFromSuperview()
        })
        btmView?.removeFromSuperview()
        btmView = nil
        bgBtn = nil
        listView.reloadData()
    }
    @objc func closeAction(sender:UIButton){
        bgBtn?.removeFromSuperview()
        btmView?.subviews.forEach({ (view) in
            view.removeFromSuperview()
        })
        btmView?.removeFromSuperview()
        btmView = nil
        bgBtn = nil
    }
    var btmView:UIView?
    var bgBtn:UIButton?
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(indexPath.section,indexPath.row)
        if indexPath.section == 0 {
            if indexPath.row == 1 {
                if bgBtn == nil {
                    let btn = UIButton()
                    self.view.addSubview(btn)
                    btn.backgroundColor = UIColor.black
                    btn.alpha = 0.4
                    btn.addTarget(self, action: #selector(closeAction(sender:)), for: .touchUpInside)
                    btn.snp.makeConstraints { (make) in
                        make.top.right.bottom.left.equalTo(0)
                    }
                    bgBtn = btn
                }
                if btmView == nil {
                    let view = UIView()
                    view.backgroundColor = UIColor.white
                    btmView = view
                    self.view.addSubview(btmView!)
                    btmView!.snp.makeConstraints { (make) in
                        make.left.bottom.right.equalTo(0)
                        make.height.equalTo(240)
                    }
                    showAreaSelect(view:btmView!)
                    
                    let rightBtn = UIButton()
                    rightBtn.setTitle("确定", for: .normal)
                    rightBtn.setTitleColor(UIColor(named: "蓝色字体颜色"), for: .normal)
                    rightBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15)
                    rightBtn.addTarget(self, action: #selector(adrSelectFinish(sender:)), for: .touchUpInside)
                    btmView?.addSubview(rightBtn)
                    rightBtn.snp.makeConstraints { (make) in
                        make.right.equalTo(-15)
                        make.top.equalTo(10)
                        make.height.equalTo(30)
                        make.width.equalTo(50)
                    }
                    
                    let leftBtn = UIButton()
                    leftBtn.setTitle("取消", for: .normal)
                    leftBtn.setTitleColor(UIColor(named: "多选按钮字体颜色"), for: .normal)
                    leftBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15)
                    leftBtn.addTarget(self, action: #selector(closeAction(sender:)), for: .touchUpInside)
                    btmView?.addSubview(leftBtn)
                    leftBtn.snp.makeConstraints { (make) in
                        make.left.equalTo(15)
                        make.top.equalTo(10)
                        make.height.equalTo(30)
                        make.width.equalTo(50)
                    }
                }
            }
        }
    }
    
    func rightBtnClick() {
        let alertView = GeliAlertView(frame: self.view.window!.bounds)
        alertView.delegate = self
        alertView.tishiLbl.text = ""
        alertView.titileLbl.text = "是否删除地址?"
        alertView.rightBtn.setAttributedTitle(NSAttributedString(string: "确定"), for: .normal)
        alertView.rightBtn.tag = 999
        self.view.window?.addSubview(alertView)
    }
    //MARK: -  cell delegate
    func TitleAndTFAndBtnCellBtnClick() {
        let vc = SJMapViewController()
        vc.delegate = self
        self.navigationController?.pushViewController(vc, animated: true)
    }
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = UIView(frame: CGRect(x: 0, y: 0, width: fullScreenWidth, height: 10*glscale))
        view.backgroundColor = UIColor.clear
        return view
    }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section != 0 {
            return 10*glscale
        }
        return 0.001
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 49*glscale
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return 3
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if section == 0 {
            return 6
        }
        return 1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        switch indexPath.section {
        case 0:
            if indexPath.row != 1 && indexPath.row != 2 {
                let cell = tableView.dequeueReusableCell(withIdentifier: "TitleAndTFCell") as! TitleAndTFCell
                cell.nameLbl.text = titleArr[indexPath.row]
                if indexPath.row == 0 {//收货人
                    cell.textTF.keyboardType = .default
                    cell.textTF.text = nameStr
                }
                if indexPath.row == 3 {//手机
                    cell.textTF.keyboardType = .numberPad
                    cell.textTF.text = phone
                }
                if indexPath.row == 4 {//电话
                    cell.textTF.keyboardType = .numberPad
                    cell.textTF.text = tel
                }
                if indexPath.row == 5 {//邮编
                    cell.textTF.keyboardType = .numberPad
                    cell.textTF.text = zip
                }
                cell.textTF.placeholder = holderArr[indexPath.row]
                cell.tag = indexPath.row
                cell.textTF.tag = cell.tag
                cell.textTF.delegate = self
                return cell
            }
            if indexPath.row == 1 {
                let cell = tableView.dequeueReusableCell(withIdentifier: "TitleAndBtnCell") as! TitleAndBtnCell
                cell.nameLbl.text = titleArr[indexPath.row]
                cell.contentLbl.text = holderArr[indexPath.row]
                cell.btn.isUserInteractionEnabled = false
                return cell
            }
            let cell = tableView.dequeueReusableCell(withIdentifier: "TitleAndTFAndBtnCell") as! TitleAndTFAndBtnCell
            cell.titleLbl.text = titleArr[indexPath.row]
            cell.textTF.text = adrStr
            cell.textTF.delegate = self
            cell.textTF.tag = 2
            cell.textTF.placeholder = holderArr[indexPath.row]
            cell.delegate = self
            return cell
        default:
            let cell = tableView.dequeueReusableCell(withIdentifier: "TitleAndSwitchCell") as! TitleAndSwitchCell
            cell.namelbl.text = "设为默认收货地址"
            if indexPath.section == 1 {
                cell.namelbl.text = "设为默认寄件地址"
                cell.infoSw.isOn = is_send_default
            }else{
                cell.infoSw.isOn = is_default
            }
            cell.tag = indexPath.section
            cell.delegate = self
            return cell
        }
    }
    
    //MARK:--地址选择器
    func showAreaSelect(view:UIView){
        //创建选择器
        
        pickerView=UIPickerView()
        //将dataSource设置成自己
        pickerView.dataSource=self
        //将delegate设置成自己
        pickerView.delegate=self
        view.addSubview(pickerView)
        pickerView.snp.makeConstraints { (make) in
            make.top.equalTo(30)
            make.left.right.bottom.equalTo(0)
        }
        pickerView.selectRow(provinceIndex, inComponent: 0, animated: false)
        pickerView(pickerView, didSelectRow: provinceIndex, inComponent: 0)
        pickerView.selectRow(cityIndex, inComponent: 1, animated: false)
        pickerView(pickerView, didSelectRow: cityIndex, inComponent: 1)
        pickerView.selectRow(areaIndex, inComponent: 2, animated: false)
        pickerView(pickerView, didSelectRow: areaIndex, inComponent: 2)
        
        
    }
    //选择器
    var pickerView:UIPickerView!
    //所以地址数据集合
    var addressArray:Array<Any> = []
    
    //设置选择框的列数为3列,继承于UIPickerViewDataSource协议
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 3
    }
    
    //设置选择框的行数,继承于UIPickerViewDataSource协议
    func pickerView(_ pickerView: UIPickerView,
                    numberOfRowsInComponent component: Int) -> Int {
        if component == 0 {
            return self.addressArray.count
        } else if component == 1 {
            let province = self.addressArray[provinceIndex] as! Dictionary<String,Any>
            return (province["city_list"]! as AnyObject).count
        } else {
            let province = self.addressArray[provinceIndex] as! Dictionary<String,Any>
            if  (province["city_list"] as! NSArray).count == 0 {
                return 0
            }
            if let city = (province["city_list"] as! NSArray)[cityIndex]
                as? [String: AnyObject] {
                print(city["district_list"] as Any)
                return city["district_list"]!.count
            } else {
                return 0
            }
        }
    }
    //设置选择框各选项的内容,继承于UIPickerViewDelegate协议
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int,
                    forComponent component: Int) -> String? {
        if component == 0 {
            let rowDic = self.addressArray[row] as! Dictionary<String,Any>
            return rowDic["area_name"] as? String
        }else if component == 1 {
            let province = self.addressArray[provinceIndex] as! Dictionary<String,Any>
            let city = (province["city_list"] as! NSArray)[row]
                as! [String: AnyObject]
            return city["area_name"] as? String
        }else {
            let province = self.addressArray[provinceIndex] as! Dictionary<String,Any>
            let city = (province["city_list"] as! NSArray)[cityIndex]
                as! [String: AnyObject]
            let area = (city["district_list"] as! NSArray)[row] as! Dictionary<String,Any>
            return area["area_name"] as? String
        }
    }
    
    //选中项改变事件(将在滑动停止后触发)
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int,
                    inComponent component: Int) {
        //根据列、行索引判断需要改变数据的区域
        switch (component) {
        case 0:
            provinceIndex = row;
            pickerView.reloadComponent(1);
            pickerView.reloadComponent(2);
            pickerView.selectRow(cityIndex, inComponent: 1, animated: false)
            pickerView.selectRow(areaIndex, inComponent: 2, animated: false)
        case 1:
            cityIndex = row;
            pickerView.reloadComponent(2);
            pickerView.selectRow(areaIndex, inComponent: 2, animated: false)
        case 2:
            areaIndex = row;
        default:
            break;
        }
    }
    func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
        return 50
    }
    //自定义UIPickerView
    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
        let genderLbl = UILabel()
        genderLbl.textAlignment = .center
        genderLbl.font = UIFont.systemFont(ofSize: 15)
        genderLbl.textColor = UIColor.init(named: "标题字颜色")
        
        if component == 0 {
            let rowDic = self.addressArray[row] as! Dictionary<String,Any>
            genderLbl.text = rowDic["area_name"] as? String
        }else if component == 1 {
            let province = self.addressArray[provinceIndex] as! Dictionary<String,Any>
            let city = (province["city_list"] as! NSArray)[row]
                as! [String: AnyObject]
            genderLbl.text = city["area_name"] as? String
        }else {
            let province = self.addressArray[provinceIndex] as! Dictionary<String,Any>
            let city = (province["city_list"] as! NSArray)[cityIndex]
                as! [String: AnyObject]
            let area = (city["district_list"] as! NSArray)[row] as! Dictionary<String,Any>
            genderLbl.text = area["area_name"] as? String
        }
        
        return genderLbl
    }
    func SJMapViewControllerSelectArd(adr: String) {
        adrStr = adr
        listView.reloadData()
    }
    func textFieldDidEndEditing(_ textField: UITextField) {
        if textField.tag == 0 {
            if textField.text!.containsEmoji {
                HUD.flash(.label("内容不得包含表情符号"), delay: 1.2)
                textField.text = ""
            }else{
                nameStr = textField.text!
            }
        }
        if textField.tag == 3 {
            phone = textField.text!
        }
        if textField.tag == 4 {
            tel = textField.text!
        }
        if textField.tag == 5 {
            zip = textField.text!
        }
        if textField.tag == 2 {
            adrStr = textField.text!
        }
        listView.reloadData()
    }
    
    func switchClick(content: UISwitch, cell: TitleAndSwitchCell) {
        if cell.tag == 1 {//寄件
            is_send_default = content.isOn
        }else{//收件
            is_default = content.isOn
        }
    }
}