//
//  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, DaiQueRenCellDelegate, GeliAlertViewDelegate, OrderDViewControllerDelegate{
    //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
    
    //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 = 5
            break
        case "已取消":
            orderStatus = 2
            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
        let UserToken = UserDefaults.standard.value(forKey: "user_token")
        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("加载更多数据")
        
        let UserToken = UserDefaults.standard.value(forKey: "user_token")
        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: "DaiQueRenCell", bundle: nil), forCellReuseIdentifier: "DaiQueRenCell")
        
        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: "DaiQueRenCell") as! DaiQueRenCell
        let rowModel = self.dataArr[indexPath.row]
        
        cell.cancelBtn.isHidden = false
        cell.submitBtn.isHidden = false
        cell.submitBtn.tag = indexPath.row
        cell.cancelBtn.tag = indexPath.row
        cell.nameLbl.text = rowModel.user_name
        if rowModel.cus_name != nil {
            cell.nameLbl.text = rowModel.cus_name
        }
        cell.statusLbl.text = orderStatusStrByInt(leftBtn: cell.cancelBtn, rightBtn: cell.submitBtn, statusNumber: rowModel.order_status!)
        cell.accountLbl.text = rowModel.order_sn
        
        cell.typeLbl.text = orderTypeStrByInt(statusNumber: rowModel.order_type!)
        if rowModel.order_type == 1 {
            cell.typeLbl.isHidden = true
        }else{
            cell.typeLbl.isHidden = false
        }
        
        if rowModel.from == 3 {
            cell.formLbl.isHidden = false
            cell.typeLbl.isHidden = true
            
        }else{
            cell.formLbl.isHidden = true
        }
        if rowModel.order_type == 4 {
            cell.formLbl.isHidden = true
            cell.typeLbl.isHidden = false
        }
        
        cell.dateLbl.text = dayAndTimeByDouble(sender: rowModel.add_time!)
        cell.countLbl.text = "商品数量:\(rowModel.goods_number!)"
        cell.priceLbl.text = "金额:¥\(rowModel.sum_amount!)"
        cell.delegate = self
        
        return cell
    }
    //MARK:--如果存在操作是否需要自动刷新?
    func cancel(sender: UIButton) {
        print(sender.tag)
        //取消订单
        isSrueOrder = false
        let rowModel = self.dataArr[sender.tag]
        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)
    }
    var isSrueOrder = false
    func submit(sender: UIButton) {
        print(sender.tag)
        let rowModel = self.dataArr[sender.tag]
        if sender.titleLabel?.text == "确认订单" {
            isSrueOrder = 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 = false
            
            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 {
            //跳转订单详情
            let vc = OrderDViewController()
            vc.delegate = self
            vc.orderId = rowModel.order_id!
            self.navigationController?.pushViewController(vc, animated: true)
        }
        
    }
    func sureGeliAlertViewAction(sender: UIButton) {
        if isSrueOrder {
            let UserToken = UserDefaults.standard.value(forKey: "user_token")
            
            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
                
            }
        }else{
            let UserToken = UserDefaults.standard.value(forKey: "user_token")
            
            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
                
            }
        }
        
    }
    
    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 {
        return 224
    }
    
}