//
//  AppThemeTokensTests.swift
//  suixinkanTests
//

import UIKit
import XCTest
@testable import suixinkan

/// Design Token 值与 Android 对齐校验。
final class AppThemeTokensTests: XCTestCase {

    func testPrimaryColorMatchesAndroid() {
        XCTAssertEqual(AppColor.primary.hexRGB, 0x0073FF)
    }

    func testPageBackgroundColors() {
        XCTAssertEqual(AppColor.pageBackground.hexRGB, 0xF5F5F5)
        XCTAssertEqual(AppColor.pageBackgroundSoft.hexRGB, 0xF7FAFF)
    }

    func testTextColorsMatchAndroid() {
        XCTAssertEqual(AppColor.textPrimary.hexRGB, 0x333333)
        XCTAssertEqual(AppColor.textSecondary.hexRGB, 0x666666)
        XCTAssertEqual(AppColor.textTertiary.hexRGB, 0x999999)
    }

    func testSemanticStatusColors() {
        XCTAssertEqual(AppColor.success.hexRGB, 0x10B981)
        XCTAssertEqual(AppColor.danger.hexRGB, 0xEF4444)
        XCTAssertEqual(AppColor.warning.hexRGB, 0xFF7B00)
        XCTAssertEqual(AppColor.info.hexRGB, 0x0073FF)
    }

    func testSpacingGrid() {
        XCTAssertEqual(AppSpacing.xxs, 4)
        XCTAssertEqual(AppSpacing.xs, 8)
        XCTAssertEqual(AppSpacing.sm, 12)
        XCTAssertEqual(AppSpacing.md, 16)
        XCTAssertEqual(AppSpacing.lg, 24)
        XCTAssertEqual(AppSpacing.screenHorizontalInset, AppSpacing.md)
        XCTAssertEqual(AppSpacing.minTouchTarget, 44)
        XCTAssertGreaterThanOrEqual(AppSpacing.buttonHeight, AppSpacing.minTouchTarget)
    }

    func testRadiusTokens() {
        XCTAssertEqual(AppRadius.xs, 4)
        XCTAssertEqual(AppRadius.md, 10)
        XCTAssertEqual(AppRadius.lg, 12)
        XCTAssertEqual(AppRadius.xl, 16)
    }

    func testAppFontSizes() {
        XCTAssertEqual(UIFont.app(.body).pointSize, 14)
        XCTAssertEqual(UIFont.app(.metric).pointSize, 18)
        XCTAssertEqual(UIFont.app(.display).pointSize, 28)
    }

    func testStatusBadgeOrderMapping() {
        let badge = AppStatusBadge()
        badge.applyOrderStatus(30, text: "已完成")
        // 布局完成后仍应能读取子 label 文案
        XCTAssertFalse(badge.isHidden)
    }
}

private extension UIColor {

    var hexRGB: UInt {
        var red: CGFloat = 0
        var green: CGFloat = 0
        var blue: CGFloat = 0
        var alpha: CGFloat = 0
        getRed(&red, green: &green, blue: &blue, alpha: &alpha)
        let r = Int(round(red * 255))
        let g = Int(round(green * 255))
        let b = Int(round(blue * 255))
        return UInt(r << 16 | g << 8 | b)
    }
}
