WomenHealthVC.swift 9.78 KB
//
//  WomenHealthVC.swift
//  Twear
//
//  Created by yangbin on 2021/11/25.
//

import UIKit
import MBProgressHUD
import SwiftDate
import CoreMedia

class WomenHealthVC: UIViewController {
    
    let menstrual = UserInfo.menstrual
    
//    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var cycleLabel: UILabel!
    @IBOutlet weak var daysLabel: UILabel!
    
    var setClosure: (() -> ())?
    
    var isFirst: Bool = false
    
    
//    @IBOutlet weak var firstView: UIView!
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.setNavigationBarHidden(false, animated: true)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        title = LocString("生理周期设置")
        
        if menstrual.days == 0 {
            daysLabel.text = "--\(LocString("天"))"
            cycleLabel.text = "--\(LocString("天"))"
//            dateLabel.text = LocString("未选择")
        } else {
            daysLabel.text = "\(menstrual.days)\(LocString("天"))"
            cycleLabel.text = "\(menstrual.cycle)\(LocString("天"))"
//            dateLabel.text = menstrual.lastDate!.toString(.custom("yyyy-MM-dd"))
        }
        
        
        if isFirst {
//            firstView.isHidden = false
        }
        
        
        let saveButton = UIButton(frame: CGRect(x: 0, y: 0, width: 40, height: 28))
        saveButton.setTitle(LocString("保存"), for: .normal)
        saveButton.titleLabel?.font = RegularFont(14)
        saveButton.setTitleColor(TintColor, for: .normal)
        saveButton.addTarget(self, action: #selector(save), for: .touchUpInside)
        navigationItem.rightBarButtonItem =  UIBarButtonItem(customView: saveButton)
        
        // Do any additional setup after loading the view.
    }
    
    @objc func save() {
        if daysLabel.text == "--\(LocString("天"))" {
            MBProgressHUD.showh(LocString("经期天数没有填哟"))
            return
        }
        if cycleLabel.text == "--\(LocString("天"))" {
            MBProgressHUD.showh(LocString("周期长度没有填哟"))
            return
        }
//        if dateLabel.text == LocString("未选择") {
//            MBProgressHUD.showh(LocString("最近一次月经没有填哟"))
//            return
//        }
        var lastDate = menstrual.lastDate!
        lastDate = lastDate - (menstrual.days - 1).days //wypwyp20220305改
        menstrual.lastDate = lastDate
        let result = getDateTypeAndPosition(date: DateInRegion().date)
        let userInfo = UserInfo
        userInfo.menstrual = menstrual
        AdminHelper.shared.updateUser(userInfo)
        let model = MenstrualCalendarModel()
        model.whichDay = result.whichDay
        model.days = result.days
        model.type = result.type
        addHistoryData()
        BluetoothManager.shared.setMenstrual(model) { Error in
            
        }
        setClosure?()
        self.navigationController?.popViewController(animated: true)
    }
    func addHistoryData() {
        let historyData = MenstrualCalendarModel.getAllDate()
        let selectedDate = DateInRegion().dateAtStartOf(.day).date
        if historyData.count == 0 {
            let n: Int = Calendar.current.dateComponents([.day], from: menstrual.lastDate!.dateAtStartOf(.day), to: selectedDate).day ?? 0//(selectedDate - menstrual.lastDate!.dateAtStartOf(.day)).in(.day) ?? 0
            for i in 0..<3*menstrual.cycle+abs(n+1) {
                let menstrualData = MenstrualCalendarModel()
                let date = selectedDate - i.days
                let result = getDateTypeAndPosition(date: date)
                menstrualData.date = date
                menstrualData.position = result.position
                menstrualData.type = result.type
                menstrualData.dateStr = date.toString(.custom("yyyy.MM.dd"))
                menstrualData.whichDay = result.whichDay
                menstrualData.days = result.days
                menstrualData.add()
            }
        }
    }
    
    @IBAction func setMenstrualDays(_ sender: Any) {
        let values = (3..<9).map { (i) -> Int in
            return i
        }
        let pickerView = ZCPickerView(title: LocString("选择经期天数"), values: values, suffix: LocString("天"))
        pickerView.selectedRow = values.firstIndex(of: menstrual.days) ?? 4
        pickerView.show()
        pickerView.clickClosure = {[weak self] value in
            self?.daysLabel.text = "\(value)\(LocString("天"))"
            self?.menstrual.days = value
//            self?.user.weight = value
//            self?.updateUserInfo()
        }
    }
 
     @IBAction func setMenstrualCycle(_ sender: Any) {
         let values = (24..<41).map { (i) -> Int in
             return i
         }
         let pickerView = ZCPickerView(title: LocString("选择周期长度"), values: values, suffix: LocString("天"))
         pickerView.selectedRow = values.firstIndex(of: menstrual.cycle) ?? 6
         pickerView.show()
         pickerView.clickClosure = {[weak self] value in
 //            self?.user.weight = value
 //            self?.updateUserInfo()
             self?.cycleLabel.text = "\(value)\(LocString("天"))"
             self?.menstrual.cycle = value
         }
     }


//    @IBAction func setLastMenstrual(_ sender: Any) {
//        let pickerView = DatePickerView(title: LocString("最近一次月经"))
//        pickerView.datePicker.datePickerMode = .date
//        pickerView.datePicker.date = Date()
//        pickerView.datePicker.maximumDate = Date()
//        pickerView.show()
//        pickerView.clickClosure = {[weak self] date in
//            self?.dateLabel.text = date.toString(.custom("yyyy-MM-dd"))
//            self?.menstrual.lastDate = date
//        }
//    }
    
    
    
    func getDateTypeAndPosition(date: Date) -> (type: MenstrualDateModel, position: MenstrualRangePosition, whichDay: Int, days: Int) {
        var type: MenstrualDateModel = .safetyPeriod
        var position: MenstrualRangePosition = .none
        var days: Int = 0
        var whichDay: Int = 0
        var differDays: Int = Calendar.current.dateComponents([.day], from: menstrual.lastDate!.dateAtStartOf(.day), to: date).day ?? 0//(date - menstrual.lastDate!.dateAtStartOf(.day)).in(.day) ?? 0
        differDays = differDays%menstrual.cycle
        var intervalDays = 0
        if differDays < 0 {
            intervalDays = menstrual.cycle + differDays
        } else {
            intervalDays = differDays
        }

       
        if intervalDays < menstrual.days { //月经
            whichDay = intervalDays+1
            days = menstrual.days
            if date.isInFuture {
                type = .predict
            } else {
                type = .menstrualPeriod
                if menstrual.days == 1 {
                    position = .full
                } else {
                    if intervalDays == 0 { //第一天
                        if date.isToday {
                            position = .full
                        } else if date.day == date.monthDays || date.weekday == 7 {
                            position = .full
                        } else {
                            position = .left
                        }
                    } else if intervalDays == menstrual.days-1 {
                        if date.day == 1 || date.weekday == 1 { //最后一天
                            position = .full
                        } else {
                            position = .right
                        }
                    } else {
                        if date.day == date.monthDays || date.weekday == 7 {
                            position = .right
                        } else if date.day == 1 || date.weekday == 1 {
                            position = .left
                        } else {
                            position = .middle
                        }
                    }
                }
            }
        } else if intervalDays > menstrual.cycle - 10 { //安全期
            whichDay = intervalDays-menstrual.cycle+10
            type = .safetyPeriod
            days = 9
        } else if intervalDays > menstrual.cycle - 20 { //易孕期
            whichDay = intervalDays-menstrual.cycle+20
            days = min(menstrual.cycle-9-menstrual.days, 10)
            type = .fertilePeriod
            //            if menstrual.cycle-19 == menstrual.cycle-10 {
            //                cell.type = .ovulationDay
            //            }
            if date.day == date.monthDays && date.weekday == 1 {
                position = .full
            } else if date.day == 1 && date.weekday == 7 {
                position = .full
            } else if intervalDays == menstrual.cycle-10 { //最后一天
                if date.day == 1 || date.weekday == 1 {
                    position = .full
                } else {
                    position = .right
                }
            } else if intervalDays == menstrual.cycle-19 { //第一天
                if date.day == date.monthDays || date.weekday == 7 {
                    position = .full
                } else {
                    position = .left
                }
            } else {
                if intervalDays == menstrual.cycle-14 {
                    type = .ovulationDay
                }
                if date.day == date.monthDays || date.weekday == 7 {
                    position = .right
                } else if date.day == 1 || date.weekday == 1 {
                    position = .left
                } else {
                    position = .middle
                }
            }
        } else { //安全期
            whichDay = intervalDays-menstrual.days+1
            days = menstrual.cycle-19-menstrual.days
            type = .safetyPeriod
        }
        
        
        
        
        return (type, position, whichDay, days)
    }
}

/*

*/