Files
Reflect/Shared/ShowBasedOnVoteLogics.swift
2022-02-17 15:00:15 -06:00

124 lines
5.5 KiB
Swift

//
// ShowBasedOnVoteLogics.swift
// Feels (iOS)
//
// Created by Trey Tartt on 2/17/22.
//
import CoreData
import SwiftUI
//if this is being shown we're missing an entry
// voting time is noon
// vote for current day
// today at 11 am -> How as yesterday
// today at 1 pm -> How is today
// vote for previous day
// today at 11 am -> How as 2 days ago
// today at 1 pm -> How was yesterday
class ShowBasedOnVoteLogics {
private static var currentVoting: (passTimeToVote: Bool, dayOptions: DayOptions) {
let passedTimeToVote = UserDefaultsStore.getOnboarding().ableToVoteBasedOnCurentTime()
let inputDay = UserDefaultsStore.getOnboarding().inputDay
return (passedTimeToVote, inputDay)
}
static func isMissingCurrentVote() -> Bool {
var startDate: Date?
switch (currentVoting.passTimeToVote, currentVoting.dayOptions) {
case (true, .Previous):
// if we're passed time to vote and the voting type is previous - last vote should be -1
startDate = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
case (true, .Today):
// if we're passed time to vote and the voting type is today - last vote should be current date
startDate = Date()
case (false, .Previous):
// if we're NOT passed time to vote and the voting type is previous - last vote should be 2 days ago
startDate = Calendar.current.date(byAdding: .day, value: -2, to: Date())!
case (false, .Today):
// if we're NOT passed time to vote and the voting type is previous - last vote should be -1
startDate = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
}
startDate = Calendar.current.startOfDay(for: startDate!)
let endDate = Calendar.current.date(byAdding: .day, value: 1, to: startDate!)!
let fetchRequest = NSFetchRequest<MoodEntry>(entityName: "MoodEntry")
let fromPredicate = NSPredicate(format: "%@ <= %K", startDate!
as NSDate, #keyPath(MoodEntry.forDate))
let toPredicate = NSPredicate(format: "%K < %@", #keyPath(MoodEntry.forDate), endDate as NSDate)
let datePredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fromPredicate, toPredicate])
fetchRequest.predicate = datePredicate
let entries = try! PersistenceController.shared.viewContext.count(for: fetchRequest)
return entries < 1
}
static func getVotingTitle() -> String {
switch (currentVoting.passTimeToVote, currentVoting.dayOptions) {
case (true, .Previous):
// if we're passed time to vote and the voting type is previous - last vote should be -1
return "how was yesterday"
case (true, .Today):
// if we're passed time to vote and the voting type is previous - last vote should be today
return "how is today"
case (false, .Previous):
// if we're passed time to vote and the voting type is previous - last vote should be -2
let lastDayVoteShouldExist = ShowBasedOnVoteLogics.getLastDateVoteShouldExist()
return "how was \(Random.weekdayName(fromDate: lastDayVoteShouldExist))"
case (false, .Today):
// if we're passed time to vote and the voting type is previous - last vote should be -1
return "how as yesterday"
}
}
static func dateForHeaderVote() -> Date? {
var date: Date?
switch (currentVoting.passTimeToVote, currentVoting.dayOptions) {
case (true, .Previous):
// if we're passed time to vote and the voting type is previous - last vote should be -1
date = Calendar.current.date(byAdding: .day, value: -1, to: Date())
case (true, .Today):
// if we're passed time to vote and the voting type is previous - last vote should be today
date = Date()
case (false, .Previous):
// if we're passed time to vote and the voting type is previous - last vote should be -2
date = Calendar.current.date(byAdding: .day, value: -2, to: Date())
case (false, .Today):
// if we're passed time to vote and the voting type is previous - last vote should be -1
date = Calendar.current.date(byAdding: .day, value: -1, to: Date())
}
if let date = date {
return date
}
return nil
}
static func getLastDateVoteShouldExist() -> Date {
var endDate: Date?
switch (currentVoting.passTimeToVote, currentVoting.dayOptions) {
case (true, .Previous):
// if we're passed time to vote and the voting type is previous - last vote should -1
endDate = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
case (true, .Today):
// if we're passed time to vote and the voting type is previous - last vote should be today
endDate = Date()
case (false, .Previous):
// if we're passed time to vote and the voting type is previous - last vote should be -2
endDate = Calendar.current.date(byAdding: .day, value: -2, to: Date())!
case (false, .Today):
// if we're passed time to vote and the voting type is previous - last vote should be -1
endDate = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
}
return endDate!
}
}