KasztelanKarta/Kasztelan/Models.swift
2026-10-16 23:37:49 +01:00

118 lines
3.1 KiB
Swift

import Foundation
enum AppLanguage: String, CaseIterable {
case pl, en
static var initial: AppLanguage {
if let saved = UserDefaults.standard.string(forKey: "language"), let language = AppLanguage(rawValue: saved) {
return language
}
return Locale.current.language.languageCode?.identifier == "pl" ? .pl : .en
}
}
struct UserProfile: Codable, Equatable {
var id: Int?
var username: String?
var email: String?
var firstName: String?
var lastName: String?
var displayName: String?
var mobile: String?
var postcode: String?
var dob: String?
var cardNumber: String?
var cardAssigned: Bool?
enum CodingKeys: String, CodingKey {
case id, username, email, mobile, dob
case firstName = "first_name"
case lastName = "last_name"
case displayName = "display_name"
case postcode = "kod_pocztowy"
case cardNumber = "numer_karty"
case cardAssigned = "card_assigned"
}
}
struct Loyalty: Codable, Equatable {
var points: FlexibleText?
var transactionsValue: FlexibleText?
var discountValue: FlexibleText?
var cardNumber: FlexibleText?
var savings: FlexibleText?
var firstName: FlexibleText?
enum CodingKeys: String, CodingKey {
case points, savings
case transactionsValue = "transactions_value"
case discountValue = "discount_value"
case cardNumber = "card_number"
case firstName = "first_name"
}
}
struct FlexibleText: Codable, Equatable {
let value: String
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if let string = try? container.decode(String.self) { value = string }
else if let integer = try? container.decode(Int.self) { value = String(integer) }
else if let decimal = try? container.decode(Double.self) { value = String(decimal) }
else { value = "" }
}
}
struct KasztelanMessage: Codable, Identifiable, Equatable {
let id: Int
let title: String
let text: String
let sentAt: Int
enum CodingKeys: String, CodingKey {
case id, title, text
case sentAt = "sent_at"
}
}
struct APIEnvelope: Codable {
var success: Bool? = nil
var token: String? = nil
var user: UserProfile? = nil
var loyalty: Loyalty? = nil
var notifications: [KasztelanMessage]? = nil
var notification: KasztelanMessage? = nil
var key: String? = nil
var payload: String? = nil
var updatedAt: Int? = nil
var code: String? = nil
var message: String? = nil
enum CodingKeys: String, CodingKey {
case success, token, user, loyalty, notifications, notification, key, payload, code, message
case updatedAt = "updated_at"
}
}
struct RegistrationForm {
var firstName = ""
var lastName = ""
var email = ""
var password = ""
var mobile = ""
var postcode = ""
var dob = ""
var cardNumber = ""
var acceptsTerms = false
}
struct ProfileForm {
var firstName = ""
var lastName = ""
var email = ""
var mobile = ""
var postcode = ""
var dob = ""
}