BluetoothManager+Set.swift 4.04 KB
//
//  File.swift
//  Twear
//
//  Created by yangbin on 2022/1/22.
//

import SwiftDate


extension BluetoothManager {
    
    func getDateTypeAndPosition(_ menstrual: MenstrualModel, 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 = (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)
    }

}