//
//  CreateFilterService.swift
//  Tusker
//
//  Created by Shadowfacts on 12/3/22.
//  Copyright © 2022 Shadowfacts. All rights reserved.
//

import Foundation
import Pachyderm

@MainActor
class CreateFilterService {
    private let filter: EditedFilter
    private let mastodonController: MastodonController
    
    init(filter: EditedFilter, mastodonController: MastodonController) {
        self.filter = filter
        self.mastodonController = mastodonController
    }
    
    func run() async throws {
        let updateFrom: AnyFilter
        if mastodonController.instanceFeatures.filtersV2 {
            let updates = filter.keywords.map {
                FilterV2.KeywordUpdate.add(keyword: $0.keyword, wholeWord: $0.wholeWord)
            }
            let req = FilterV2.create(title: filter.title!, context: filter.contexts, expiresIn: filter.expiresIn, action: filter.action, keywords: updates)
            let (updated, _) = try await mastodonController.run(req)
            updateFrom = .v2(updated)
        } else {
            let req = Client.createFilterV1(phrase: filter.keywords.first!.keyword, context: filter.contexts, irreversible: nil, wholeWord: filter.keywords.first!.wholeWord, expiresIn: filter.expiresIn)
            let (updated, _) = try await mastodonController.run(req)
            updateFrom = .v1(updated)
        }
        let context = mastodonController.persistentContainer.viewContext
        let mo = FilterMO(context: context)
        mo.updateFrom(apiFilter: updateFrom, context: context)
        mastodonController.persistentContainer.save(context: context)
    }
}
