//
//  Constants.swift
//  AppClientBaseSwift
//
//  App-wide constants and configuration
//  Hằng số và cấu hình toàn ứng dụng
//

import SwiftUI

// MARK: - API Configuration
// Cấu hình API endpoints

/// API configuration constants
/// Các hằng số cấu hình API
enum APIConfig {
    /// Base URL for API requests (Traefik gateway)
    /// URL gốc cho các request API (Traefik gateway)
    static let baseURL = "http://localhost"

    /// API version prefix
    /// Tiền tố phiên bản API
    static let apiVersion = "/api/v1"

    /// OAuth2 token endpoint (no version prefix, routed through Traefik)
    /// OAuth2 token endpoint (không có version prefix, route qua Traefik)
    static let tokenEndpoint = "/connect/token"

    /// OAuth2 client ID for password grant
    /// OAuth2 client ID cho password grant
    static let oauthClientId = "password-client"

    /// OAuth2 client secret for password grant
    /// OAuth2 client secret cho password grant
    static let oauthClientSecret = "password-client-secret"

    /// OAuth2 scope for authentication
    /// OAuth2 scope cho xác thực
    static let oauthScope = "openid profile email api offline_access"

    /// Request timeout in seconds
    /// Thời gian timeout request (giây)
    static let timeout: TimeInterval = 30.0
}


// MARK: - App Constants
// Hằng số ứng dụng

/// General app constants
/// Các hằng số chung của ứng dụng
enum AppConstants {
    /// App name
    /// Tên ứng dụng
    static let appName = "GoodGo"

    /// Bundle identifier
    /// Định danh bundle
    static let bundleId = "vn.goodgo.client"

    /// Keychain service name
    /// Tên service Keychain
    static let keychainService = "vn.goodgo.keychain"

    /// Default animation duration
    /// Thời gian animation mặc định
    static let animationDuration: Double = 0.3
}

// MARK: - Storage Keys
// Khóa lưu trữ

/// UserDefaults and Keychain keys
/// Các khóa cho UserDefaults và Keychain
enum StorageKeys {
    /// Access token key
    /// Khóa access token
    static let accessToken = "access_token"

    /// Refresh token key
    /// Khóa refresh token
    static let refreshToken = "refresh_token"

    /// User data key
    /// Khóa dữ liệu người dùng
    static let userData = "user_data"

    /// Is first launch key
    /// Khóa kiểm tra lần chạy đầu tiên
    static let isFirstLaunch = "is_first_launch"

    /// Selected language key
    /// Khóa ngôn ngữ đã chọn
    static let selectedLanguage = "selected_language"
}

// MARK: - Design System
// Hệ thống thiết kế

/// Design system constants for consistent UI
/// Hằng số hệ thống thiết kế cho UI nhất quán
enum DesignSystem {

    // MARK: Spacing
    // Khoảng cách

    /// Extra small spacing (4pt)
    static let spacingXS: CGFloat = 4

    /// Small spacing (8pt)
    static let spacingSM: CGFloat = 8

    /// Medium spacing (16pt)
    static let spacingMD: CGFloat = 16

    /// Large spacing (24pt)
    static let spacingLG: CGFloat = 24

    /// Extra large spacing (32pt)
    static let spacingXL: CGFloat = 32

    // MARK: Corner Radius
    // Bo góc

    /// Small corner radius
    static let cornerRadiusSM: CGFloat = 8

    /// Medium corner radius
    static let cornerRadiusMD: CGFloat = 12

    /// Large corner radius
    static let cornerRadiusLG: CGFloat = 16

    /// Circular corner radius
    static let cornerRadiusCircle: CGFloat = 999

    // MARK: Font Sizes
    // Kích thước font

    /// Caption font size (12pt)
    static let fontCaption: CGFloat = 12

    /// Body font size (14pt)
    static let fontBody: CGFloat = 14

    /// Subhead font size (16pt)
    static let fontSubhead: CGFloat = 16

    /// Headline font size (18pt)
    static let fontHeadline: CGFloat = 18

    /// Title font size (24pt)
    static let fontTitle: CGFloat = 24

    /// Large title font size (32pt)
    static let fontLargeTitle: CGFloat = 32
}

// MARK: - Colors
// Màu sắc

// Note: Color assets are auto-generated by Xcode 16+ from Assets.xcassets
// Các color assets được Xcode 16+ tự động generate từ Assets.xcassets
//
// Available colors / Màu có sẵn:
// - .brandPrimary    - Pastel Yellow (#FFDFB0)
// - .brandSecondary  - Soft Peach (#FFDAB9)
// - .brandAccent     - Warm Gold (#F4BA3E)
// - .appBackground   - Warm White (#FFFCF1)
// - .cardBackground  - Pure White (#FFFFFF)
// - .textPrimary     - Dark Brown (#1E2025)
// - .textSecondary   - Medium Gray (#666B75)
// - .success         - Pastel Green (#7AC88A)
// - .warning         - Soft Orange (#FFC761)
// - .error           - Pastel Red (#FF949E)
// - .info            - Pastel Blue (#B4D4FF)
// - .gradientStart   - Light Yellow (#FFF5D6)
// - .gradientEnd     - Soft Peach (#FFE8D6)

// MARK: - Theme
// Theme ứng dụng

/// App theme configuration
/// Cấu hình theme ứng dụng
enum AppTheme {

    /// Primary gradient - Pastel Yellow to Peach
    /// Gradient chính - Vàng pastel sang Đào
    static let primaryGradient = LinearGradient(
        colors: [Color.gradientStart, Color.gradientEnd],
        startPoint: .topLeading,
        endPoint: .bottomTrailing
    )

    /// Warm gradient - Yellow to Orange accent
    /// Gradient ấm - Vàng sang cam nhấn
    static let warmGradient = LinearGradient(
        colors: [Color.brandPrimary, Color.brandAccent],
        startPoint: .top,
        endPoint: .bottom
    )

    /// Soft gradient - Light yellow with transparency
    /// Gradient nhẹ - Vàng nhạt với độ trong suốt
    static let softGradient = LinearGradient(
        colors: [
            Color.brandPrimary.opacity(0.3),
            Color.brandSecondary.opacity(0.2)
        ],
        startPoint: .topLeading,
        endPoint: .bottomTrailing
    )

    /// Card shadow color
    /// Màu đổ bóng card
    static let cardShadow = Color.brandAccent.opacity(0.15)

    /// Button shadow color
    /// Màu đổ bóng nút
    static let buttonShadow = Color.brandAccent.opacity(0.3)
}
