//
//  UIConstants.swift
//  TheNoiseClock
//
//  Created by Matt Bruce on 9/7/25.
//

import SwiftUI

/// UI-specific constants for colors, sizes, and styling
enum UIConstants {
    
    // MARK: - Colors
    enum Colors {
        static let accentColor = Color.blue
        static let primaryText = Color.white
        static let secondaryText = Color.gray
        static let background = Color.black
        static let overlayBackground = Color.black.opacity(0.25)
        static let overlayBorder = Color.white.opacity(0.05)
    }
    
    // MARK: - Font Sizes
    enum FontSizes {
        static let largeTitle: CGFloat = 34
        static let title: CGFloat = 28
        static let title2: CGFloat = 22
        static let title3: CGFloat = 20
        static let headline: CGFloat = 17
        static let body: CGFloat = 17
        static let callout: CGFloat = 16
        static let subheadline: CGFloat = 15
        static let footnote: CGFloat = 13
        static let caption: CGFloat = 12
        static let caption2: CGFloat = 11
    }
    
    // MARK: - Spacing
    enum Spacing {
        static let extraSmall: CGFloat = 4
        static let small: CGFloat = 8
        static let medium: CGFloat = 12
        static let large: CGFloat = 16
        static let extraLarge: CGFloat = 20
        static let huge: CGFloat = 24
    }
    
    // MARK: - Corner Radius
    enum CornerRadius {
        static let small: CGFloat = 8
        static let medium: CGFloat = 12
        static let large: CGFloat = 16
        static let extraLarge: CGFloat = 20
    }
    
    // MARK: - Border Width
    enum BorderWidth {
        static let thin: CGFloat = 0.5
        static let normal: CGFloat = 1
        static let thick: CGFloat = 2
    }
    
    // MARK: - Opacity
    enum Opacity {
        static let disabled: Double = 0.3
        static let secondary: Double = 0.6
        static let primary: Double = 0.8
        static let full: Double = 1.0
    }
    
    // MARK: - Animation Curves
    enum AnimationCurves {
        static let smooth = Animation.smooth(duration: AppConstants.AnimationDurations.medium)
        static let bouncy = Animation.bouncy(duration: AppConstants.AnimationDurations.bouncy)
        static let quick = Animation.easeInOut(duration: AppConstants.AnimationDurations.short)
    }
}
