//
//  AppStatusBadge.swift
//  suixinkan
//

import SnapKit
import UIKit

/// 统一状态标签，合并订单 / 个人信息等 badge 配色逻辑。
final class AppStatusBadge: UIView {

    /// 语义色调。
    enum Tone {
        case info
        case success
        case warning
        case danger
        case neutral
    }

    /// 订单 badge 字号与内边距样式。
    enum OrderBadgeStyle {
        case photographer
        case deposit
    }

    private let label = UILabel()

    override init(frame: CGRect) {
        super.init(frame: frame)
        label.textAlignment = .center
        addSubview(label)
        applyOrderBadgeStyle(.photographer)
        layer.cornerRadius = AppRadius.xs
        clipsToBounds = true
    }

    @available(*, unavailable)
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    /// 设置订单 badge 样式（摄影师 14sp / 店铺 12sp）。
    func applyOrderBadgeStyle(_ style: OrderBadgeStyle) {
        switch style {
        case .photographer:
            label.font = .app(.bodyMedium)
            label.snp.remakeConstraints { make in
                make.edges.equalToSuperview().inset(
                    UIEdgeInsets(top: 0, left: AppSpacing.xxs, bottom: 0, right: AppSpacing.xxs)
                )
            }
        case .deposit:
            label.font = .app(.caption)
            label.snp.remakeConstraints { make in
                make.edges.equalToSuperview().inset(
                    UIEdgeInsets(top: 2, left: AppSpacing.xs, bottom: 2, right: AppSpacing.xs)
                )
            }
        }
    }

    /// 按语义色调与文案刷新展示。
    func apply(tone: Tone, text: String) {
        label.text = text
        switch tone {
        case .info:
            label.textColor = AppColor.info
            backgroundColor = AppColor.infoBackground
        case .success:
            label.textColor = AppColor.success
            backgroundColor = AppColor.successBackground
        case .warning:
            label.textColor = AppColor.warning
            backgroundColor = AppColor.warningBackground
        case .danger:
            label.textColor = AppColor.danger
            backgroundColor = AppColor.dangerBackground
        case .neutral:
            label.textColor = OrderTokens.depositRefunded
            backgroundColor = OrderTokens.depositRefundedBackground
        }
    }

    /// 摄影师订单状态映射（对齐 Android `OrderView`）。
    func applyOrderStatus(_ status: Int, text: String) {
        applyOrderBadgeStyle(.photographer)
        switch status {
        case 18:
            apply(tone: .info, text: text)
        case 30:
            apply(tone: .success, text: text)
        case 50:
            apply(tone: .danger, text: text)
        default:
            apply(tone: .warning, text: text)
        }
    }

    /// 店铺订单状态映射（对齐 Android `DepositOrderCard`）。
    func applyDepositOrderStatus(_ status: Int, text: String) {
        applyOrderBadgeStyle(.deposit)
        switch status {
        case 20:
            apply(tone: .info, text: text)
        case 30:
            label.text = text
            label.textColor = OrderTokens.depositSuccess
            backgroundColor = OrderTokens.depositSuccessBackground
        case 50:
            apply(tone: .neutral, text: text)
        default:
            apply(tone: .warning, text: text)
        }
    }
}
