//
//  MetaText.swift
//  Mastodon
//
//  Created by MainasuK Cirno on 2021-7-22.
//

import UIKit
import Meta
import MetaTextKit

extension MetaLabel {
    enum Style {
        case statusHeader
        case statusName
        case notificationName
        case profileFieldName
        case profileFieldValue
        case recommendAccountName
        case titleView
        case settingTableFooter
    }

    convenience init(style: Style) {
        self.init()

        layer.masksToBounds = true
        textContainer.lineBreakMode = .byTruncatingTail

        let font: UIFont
        let textColor: UIColor

        switch style {
        case .statusHeader:
            font = UIFontMetrics(forTextStyle: .footnote).scaledFont(for: .systemFont(ofSize: 13, weight: .medium), maximumPointSize: 17)
            textColor = Asset.Colors.Label.secondary.color

        case .statusName:
            font = .systemFont(ofSize: 17, weight: .semibold)
            textColor = Asset.Colors.Label.primary.color

        case .notificationName:
            font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 15, weight: .semibold), maximumPointSize: 20)
            textColor = Asset.Colors.brandBlue.color

        case .profileFieldName:
            font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 17, weight: .semibold), maximumPointSize: 20)
            textColor = Asset.Colors.Label.primary.color

        case .profileFieldValue:
            font = UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 17, weight: .regular), maximumPointSize: 20)
            textColor = Asset.Colors.Label.primary.color
            textAlignment = .right


        case .titleView:
            font = .systemFont(ofSize: 17, weight: .semibold)
            textColor = Asset.Colors.Label.primary.color
            textAlignment = .center
            paragraphStyle.alignment = .center

        case .recommendAccountName:
            font = .systemFont(ofSize: 18, weight: .semibold)
            textColor = .white

        case .settingTableFooter:
            font = .preferredFont(forTextStyle: .body)
            textColor = Asset.Colors.Label.primary.color
            numberOfLines = 0
            textContainer.maximumNumberOfLines = 0
            paragraphStyle.alignment = .center
        }

        self.font = font
        self.textColor = textColor
        
        textAttributes = [
            .font: font,
            .foregroundColor: textColor
        ]
        linkAttributes = [
            .font: font,
            .foregroundColor: Asset.Colors.brandBlue.color
        ]
    }

}

struct PlaintextMetaContent: MetaContent {
    let string: String
    let entities: [Meta.Entity] = []

    init(string: String) {
        self.string = string
    }

    func metaAttachment(for entity: Meta.Entity) -> MetaAttachment? {
        return nil
    }
}
