//
//  OrderListVC.swift
//  GeliBusinessPlatform
//
//  Created by 刘俊宏 on 2020/4/26.
//  Copyright © 2020 junye lu. All rights reserved.
//

import UIKit
import ViewAnimator //cell动效

class OrderListVC: BaseViewController, UITableViewDelegate, UITableViewDataSource, GeliAlertViewDelegate, OrderDViewControllerDelegate,CGDListCellDelegate{
    let UserToken = UserDefaults.standard.value(forKey: "user_token")
    
    //MARK:--基础数据
    var keyword: String = ""
    var startTime : Int = 0
    var endTime : Int = 0
    var payStatus : String = "100"
    var orderSource : Int = 0
    var shippingStatus : String = "100"
    var orderStatus : Int = 100
    var page : Int = 0
    var isUpData = false{
        didSet{
            if !isUpData {
                if tableV  != nil {
                    loadData()
                }
            }
        }
    }
    
    //MARK:--列表数据源
    var dataArr:Array<OrderListDataModel> = []
    override func viewDidLoad() {
        super.viewDidLoad()
        switch self.title {
        case "全部":
            orderStatus = 100
            break
        case "待接单":
            orderStatus = 0
            break
        case "待付款":
            orderStatus = 1
            break
        case "待发货":
            orderStatus = 6
            break
        case "待收货":
            orderStatus = 7
            break
        case "已收货":
            orderStatus = 10
            break
        case "退款退货":
            orderStatus = 1109
            break
        case "交易完成":
            orderStatus = 5
            break
        default:
            break
        }
        setTabv()
        
    }
    //MARK:--VC 初始化
    convenience init(title: String) {
        self.init(title: title, content: "")
    }
    init(title: String, content: String) {
        super.init(nibName: nil, bundle: nil)
        self.title = title
        print("ttit===\(title)")
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //MARK:--加载数据
    @objc func loadData(){
        print("加载数据")
        isUpData = true
        page = 1
        var dic = ["user_token":UserToken as Any,"keyword":keyword,"page":page,"order_status":orderStatus,"pay_status":payStatus,"order_source":orderSource,"shipping_status":shippingStatus,"start_time":startTime,"end_time":endTime]
        if endTime == 0 {
            dic.removeValue(forKey: "end_time")
        }
        orderList(dic, success: { (data) in
            
            self.dataArr.removeAll()
            let dataM = data as! OrderListModel
            dataM.data?.forEach({ (model) in
                self.dataArr.append(model)
            })
            self.tableV.reloadData()
            self.tableV?.mj_header?.endRefreshing()
            self.page = 2
            self.tableV.performBatchUpdates({
                UIView.animate(views: self.tableV!.visibleCells,
                               animations: self.animations, completion: {
                                
                })
            }, completion: nil)
            if dataM.data?.count == 0 {
                self.tableV?.mj_footer?.endRefreshingWithNoMoreData()
            }else{
                self.tableV?.mj_footer?.endRefreshing()
            }
        }) { (error) in
            self.tableV?.mj_header?.endRefreshing()
            
        }
        
        
    }
    //MARK:--加载更多数据
    @objc func loadMoreData(){
        print("加载更多数据")
        
        
        var dic = ["user_token":UserToken as Any,"keyword":keyword,"page":page,"order_status":orderStatus,"pay_status":payStatus,"order_source":orderSource,"shipping_status":shippingStatus,"start_time":startTime,"end_time":endTime]
        if endTime == 0 {
            dic.removeValue(forKey: "end_time")
        }
        orderList(dic, success: { (data) in
            let dataM = data as! OrderListModel
            if dataM.data?.count == 0 {
                self.tableV?.mj_footer?.endRefreshingWithNoMoreData()
            }else{
                self.page += 1
                dataM.data?.forEach({ (model) in
                    self.dataArr.append(model)
                })
                self.tableV.reloadData()
                self.tableV?.mj_footer?.endRefreshing()
            }
            
        }) { (error) in
            self.tableV?.mj_footer?.endRefreshing()
            
        }
        
    }
    
    //MARK:-- tablev 处理
    var tableV :UITableView!
    var tableSearchV :UITableView! = nil
    
    private let animations = [AnimationType.from(direction: .bottom, offset: 300*glscale)]
    
    func setTabv() {
        tableV = UITableView()
        view.addSubview(tableV);
        tableV.snp.makeConstraints { (make) in
            make.top.left.right.bottom.equalToSuperview()
        }
        tableV.backgroundColor = UIColor.init(named: "app底色")
        tableV.delegate = self
        tableV.dataSource = self
        tableV.separatorStyle = .none
        tableV?.register(UINib(nibName: "CGDListCell", bundle: nil), forCellReuseIdentifier: "CGDListCell")
        
        let footerTbV = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 15*glscale))
        footerTbV.backgroundColor = UIColor.init(named: "app底色")
        tableV.tableFooterView = footerTbV
        
        //下拉刷新相关设置
        headerMJ.setRefreshingTarget(self, refreshingAction: #selector(loadData))
        self.tableV!.mj_header = headerMJ
        //上拉加载相关设置
        footerMJ.setRefreshingTarget(self, refreshingAction: #selector(loadMoreData))
        self.tableV!.mj_footer = footerMJ
        self.tableV?.mj_header?.beginRefreshing()
        
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return dataArr.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CGDListCell") as! CGDListCell
        let rowModel = self.dataArr[indexPath.row]
        
        //        cell.leftIcon.isHidden = true
        //        cell.nameLblLeft.constant = -15
        if rowModel.cus_name != nil {
            cell.nameLbl.text = rowModel.cus_name
        }else{
            cell.nameLbl.text = rowModel.user_name
        }
        cell.orderNumerLbl.text = rowModel.order_sn
        cell.statusLbl.text = orderStatusStrByInt(statusNumber: rowModel.order_status!)
        cell.countLbl.text = "\(rowModel.goods_number!)"
        cell.priceLbl.text = rowModel.sum_amount
        cell.timeLbl.text = TimeByDouble(sender: rowModel.add_time!)
        
        cell.formLbl.isHidden = true
        cell.yuShouStatus.isHidden = true
        cell.orderNumberRight.constant = 15
        if rowModel.order_type == 1 {
            cell.yuShouStatus.isHidden = true
        }else{
            cell.yuShouStatus.isHidden = false
            cell.orderNumberRight.constant = 56
        }
        if rowModel.from == 3 {
            cell.formLbl.isHidden = false
            cell.orderNumberRight.constant = 78
            cell.yuShouStatus.isHidden = true
        }else{
            cell.formLbl.isHidden = true
        }
        if rowModel.order_type == 4 {
            cell.formLbl.isHidden = true
            cell.orderNumberRight.constant = 56
            cell.yuShouStatus.isHidden = false
        }
        
        var btnStr:Array<String> = []
        switch rowModel.order_status {
        case 0://待接单
            btnStr = ["同意接单","拒绝接单"]
            if rowModel.goods_before_pay == 1 {
                btnStr = ["同意接单","先货后款","拒绝接单"]
            }
            break
        case 1://待付款
            print("rowModel == ",rowModel.shipping_status,rowModel.pay_status)
            btnStr = ["取消订单"]
            if rowModel.shipping_status == 1 && rowModel.pay_status == 0 {
                btnStr = ["退货"]
            }
            if rowModel.shipping_status == 0 && rowModel.pay_status == 12 {
                btnStr = ["退款"]
            }
            break
        case 5://交易完成
            btnStr = ["查看详情"]
            break
        case 6://待发货
            btnStr = ["发货","取消订单"]
            if rowModel.pay_status == 0 {
                btnStr = ["发货","取消订单","确认收款"]
            }
            break
        case 7://待收货
            btnStr = ["确认收货","退货退款","退款"]
            if rowModel.pay_status == 0 {
                btnStr = ["确认收款","取消订单","确认收货"]
            }
            break
        case 10://已收货
            
            btnStr = ["退货退款","交易关闭"]
            if rowModel.pay_status == 0 {
                btnStr = ["确认收款"]
            }
            break
        case 9:
            if rowModel.from == 3 || rowModel.from == 5 {
                btnStr = ["确认收到退款"]
            }
            break
        case 11:
            btnStr = ["查看订单"]
            if rowModel.order_status_d == 111 || rowModel.order_status_d == 112 || rowModel.order_status_d == 113{
                btnStr = ["拒绝退款","同意退款"]
            }
            if rowModel.order_status_d == 114 || rowModel.order_status_d == 115 {
                btnStr = ["拒绝退货","同意退货"]
            }
            if rowModel.order_status_d == 116 || rowModel.order_status_d == 117 {
                btnStr = ["拒绝退款退货","同意退款退货"]
            }
            break
        default:
            btnStr = ["查看订单"]
            break
        }
        if rowModel.order_status! == 1 {
            btnStr.append("付款码")
        }
        cell.delegate = self
        cell.setBtnView(arr: btnStr, index: indexPath.row)
        cell.dataArr = rowModel.order_goods
        return cell
    }
    var isYuShou = false
    var isSrueOrder = 10086
    var rejectType = 10086
    func allBtnSubmit(sender: UIButton) {
        print(sender.tag)
        let rowModel = self.dataArr[sender.tag]
        if sender.titleLabel?.text == "同意接单" {
            isSrueOrder = 0
            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 = rowModel.order_id!
            self.view.window?.addSubview(alertView)
            
            
        }else if sender.titleLabel?.text == "拒绝接单"{
            isSrueOrder = 2
            
            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 = rowModel.order_id!
            self.view.window?.addSubview(alertView)
        }else if sender.titleLabel?.text == "退款"{
            isSrueOrder = 3
            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 = rowModel.order_id!
            self.view.window?.addSubview(alertView)
            
        }else if sender.titleLabel?.text == "同意退款" || sender.titleLabel?.text == "同意退款退货" || sender.titleLabel?.text == "同意退货"{
            isSrueOrder = 5
            let alertView = GeliAlertView(frame: self.view.window!.bounds)
                                  alertView.delegate = self;
                                  alertView.tishiLbl.text = ""
                                  alertView.titileLbl.text = "是否\(sender.titleLabel?.text)?"
                                  alertView.rightBtn.setAttributedTitle(NSAttributedString(string: "确认"), for: .normal)
                                  alertView.rightBtn.tag = rowModel.order_id!
                                  self.view.window?.addSubview(alertView)
        }else if sender.titleLabel?.text == "拒绝退款" || sender.titleLabel?.text == "拒绝退款退货" || sender.titleLabel?.text == "拒绝退货"{
            isSrueOrder = 6
            rejectType = rowModel.order_status_d!
            let alertView = GeliAlertView(frame: self.view.window!.bounds)
                                  alertView.delegate = self;
                                  alertView.tishiLbl.text = ""
                                  alertView.titileLbl.text = "是否\(sender.titleLabel?.text)?"
                                  alertView.rightBtn.setAttributedTitle(NSAttributedString(string: "确认"), for: .normal)
                                  alertView.rightBtn.tag = rowModel.order_id!
                                  self.view.window?.addSubview(alertView)
        }else if sender.titleLabel?.text == "发货" {
            isSrueOrder = 4
            if rowModel.order_type == 4 {
                isYuShou = true
            }
            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 = rowModel.order_id!
                       self.view.window?.addSubview(alertView)
        }else if sender.titleLabel?.text == "取消订单" {
            isSrueOrder = 1
            
            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 = rowModel.order_id!
            self.view.window?.addSubview(alertView)
            
            
        }else if sender.titleLabel?.text == "付款码" {
            //MARK:--付款码测试完成
            let alertView = GeliAltetCodeView(frame: self.view.window!.bounds)
            alertView.saveImgID = rowModel.order_id!
            self.view.window?.addSubview(alertView)
            
        }else {
            //跳转订单详情
            let vc = OrderDViewController()
            vc.delegate = self
            vc.orderId = rowModel.order_id!
            self.navigationController?.pushViewController(vc, animated: true)
        }
    }
    
    func sureGeliAlertViewAction(sender: UIButton) {
        switch isSrueOrder {
        case 0:
            orderConfirm(["user_token":UserToken as Any,"order_id" : sender.tag as Any], success: { (data) in
                HUD.flash(.labeledSubSuccess(subtitle: "确认成功"),delay: 1.2)
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "orderChange"), object: nil)
                self.tableV.mj_header?.beginRefreshing()
            }) { (error) in
                
            }
            break
        case 1:
            orderCancel(["user_token":UserToken as Any,"order_id" : sender.tag as Any], success: { (data) in
                HUD.flash(.labeledSubSuccess(subtitle: "取消成功"),delay: 1.2)
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "orderChange"), object: nil)
                
                self.tableV.mj_header?.beginRefreshing()
                
            }) { (error) in
                
            }
            break
        case 2:
            refuseOrder(["user_token":UserToken as Any,"order_id" : sender.tag as Any], success: { (data) in
                HUD.flash(.labeledSubSuccess(subtitle: "拒接成功"),delay: 1.2)
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "orderChange"), object: nil)
                
                self.tableV.mj_header?.beginRefreshing()
                
            }) { (error) in
                
            }
            break
        case 3:
            orderRefund(["user_token":UserToken as Any,"order_id" : sender.tag as Any], success: { (data) in
                HUD.flash(.labeledSubSuccess(subtitle: "提交成功"),delay: 1.2)
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "orderChange"), object: nil)
                self.tableV.mj_header?.beginRefreshing()
            }) { (error) in
                
            }
            break
        case 4:
            if isYuShou {
                sendOutAd(["user_token":UserToken as Any,"order_id" : sender.tag as Any], success: { (data) in
                    HUD.flash(.labeledSubSuccess(subtitle: "提交成功"),delay: 1.2)
                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "orderChange"), object: nil)
                    self.tableV.mj_header?.beginRefreshing()
                }) { (error) in
                    
                }
            }else{
                sendOut(["user_token":UserToken as Any,"order_id" : sender.tag as Any], success: { (data) in
                    HUD.flash(.labeledSubSuccess(subtitle: "提交成功"),delay: 1.2)
                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "orderChange"), object: nil)
                    self.tableV.mj_header?.beginRefreshing()
                }) { (error) in
                    
                }
            }
            break
        case 5://同意退款
            refundAndSalesReturn(["user_token":UserToken as Any,"order_id" : sender.tag as Any], success: { (data) in
                HUD.flash(.labeledSubSuccess(subtitle: "审批成功"),delay: 1.2)
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "orderChange"), object: nil)
                self.tableV.mj_header?.beginRefreshing()
            }) { (error) in
                
            }
            break
        case 6://拒绝退款
            var type = 1
            if rejectType == 114 && rejectType == 115 {
                type = 2
            }
            if rejectType == 116 && rejectType == 117  {
                type = 3
            }
            orderRefundRefuse(["user_token":UserToken as Any,"order_id" : sender.tag as Any,"type":type as Any], success: { (data) in
                HUD.flash(.labeledSubSuccess(subtitle: "拒绝成功"),delay: 1.2)
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "orderChange"), object: nil)
                self.tableV.mj_header?.beginRefreshing()
            }) { (error) in

            }
            break
        default:
            break
        }
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(indexPath)
        let rowModel = self.dataArr[indexPath.row]
        let vc = OrderDViewController()
        vc.delegate = self
        vc.orderId = rowModel.order_id!
        
        self.navigationController?.pushViewController(vc, animated: true)
    }
    func refishingOrderDchange() {
        self.tableV.mj_header?.beginRefreshing()
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let rowModel = self.dataArr[indexPath.row]
        
        if rowModel.order_goods!.count > 4 {
            return CGFloat(200 + (49 * 4))
        }
        return CGFloat(200 + (49 * rowModel.order_goods!.count))
    }
    
}