//
//  PollItem.swift
//  Mastodon
//
//  Created by MainasuK Cirno on 2021-3-2.
//

import Foundation
import CoreData

/// Note: update Equatable when change case
enum PollItem {
    case opion(objectID: NSManagedObjectID, attribute: Attribute)
}


extension PollItem {
    class Attribute: Hashable {
        
        enum SelectState: Equatable, Hashable {
            case none
            case off
            case on
        }
        
        enum VoteState: Equatable, Hashable {
            case hidden
            case reveal(voted: Bool, percentage: Double, animated: Bool)
        }
        
        var selectState: SelectState
        var voteState: VoteState
        
        init(selectState: SelectState, voteState: VoteState) {
            self.selectState = selectState
            self.voteState = voteState
        }
        
        static func == (lhs: PollItem.Attribute, rhs: PollItem.Attribute) -> Bool {
            return lhs.selectState == rhs.selectState &&
                lhs.voteState == rhs.voteState
        }

        func hash(into hasher: inout Hasher) {
            hasher.combine(selectState)
            hasher.combine(voteState)
        }
    }
}

extension PollItem: Equatable {
    static func == (lhs: PollItem, rhs: PollItem) -> Bool {
        switch (lhs, rhs) {
        case (.opion(let objectIDLeft, _), .opion(let objectIDRight, _)):
            return objectIDLeft == objectIDRight
        }
    }
}


extension PollItem: Hashable {
    func hash(into hasher: inout Hasher) {
        switch self {
        case .opion(let objectID, _):
            hasher.combine(objectID)
        }
    }
}
