import SwiftData
import UIKit

// ---------------------------------------------------------------------------
// MARK: - Car model
// ---------------------------------------------------------------------------
/// Persistent model representing a single car entry in the AutoSpot app.
/// Uses SwiftData's @Model macro for automatic persistence.
@Model
final class Car {

    // MARK: Identification
    var licensePlate: String
    var nickname: String          // user-friendly display name

    // MARK: Location
    var latitude:  Double
    var longitude: Double
    var address:   String

    // MARK: Car details
    var make:  String
    var model: String
    var year:  Int
    var color: String

    /// Binary image data captured via PhotosPicker.
    /// Stored inline (external storage is an option for larger assets).
    @Attribute(.externalStorage)
    var imageData: Data?

    var createdAt: Date
    var updatedAt: Date

    // -----------------------------------------------------------------------
    // MARK: Init with sensible defaults
    // -----------------------------------------------------------------------
    init(
        licensePlate: String = "",
        nickname: String = "",
        latitude: Double = 0,
        longitude: Double = 0,
        address: String = "",
        make: String = "",
        model: String = "",
        year: Int = Calendar.current.component(.year, from: Date()),
        color: String = "",
        imageData: Data? = nil
    ) {
        self.licensePlate = licensePlate
        self.nickname = nickname
        self.latitude = latitude
        self.longitude = longitude
        self.address = address
        self.make = make
        self.model = model
        self.year = year
        self.color = color
        self.imageData = imageData
        self.createdAt = Date()
        self.updatedAt = Date()
    }
}

// ---------------------------------------------------------------------------
// MARK: - Convenience helpers
// ---------------------------------------------------------------------------
extension Car {

    /// Returns true when both lat/lon are non-zero (i.e. a real coordinate).
    var hasValidCoordinate: Bool {
        latitude  != 0.0 && longitude != 0.0
    }

    /// Returns a unique display title for list rows.
    var displayTitle: String {
        nickname.isEmpty ? licensePlate : nickname
    }

    /// A short subtitle for list rows.
    var displaySubtitle: String {
        "\(year) \(make) \(model)"
    }
}
