//
//  FilterViewModel.swift
//  Feels
//
//  Created by Trey Tartt on 1/17/22.
//

import Foundation

class FilterViewModel: ObservableObject {    
    @Published public var entryStartDate: Date = Date()
    @Published public var entryEndDate: Date = Date()
    @Published var selectedDays = [Int]()
    
    // year, month, items
    @Published public private(set) var data = [Int: [Int: [DayChartView]]]()
    @Published public private(set) var numberOfRatings: Int = 0
    public private(set) var uncategorizedData = [MoodEntry]() {
        didSet {
            self.numberOfRatings = uncategorizedData.count
        }
    }
    
    init() {
        let filteredEntries = PersistenceController.shared.getData(startDate: Date(timeIntervalSince1970: 0),
                                                                   endDate: Date(),
                                                                   includedDays: selectedDays)
        
        if let fuckingDAte = filteredEntries.sorted(by: { $0.forDate! < $1.forDate! }).first?.forDate {
            self.entryStartDate = fuckingDAte
        }
        self.entryEndDate = Date()
    }
    
    private let chartViewBuilder = DayChartViewChartBuilder()
    
    public func filterEntries(startDate: Date, endDate: Date) {
        let filteredEntries = PersistenceController.shared.getData(startDate: startDate,
                                                                   endDate: endDate,
                                                                   includedDays: selectedDays)
        data.removeAll()
        let filledOutData = chartViewBuilder.buildGridData(withData: filteredEntries)
        data = filledOutData
        uncategorizedData = filteredEntries
    }
}
