import Foundation

// MARK: - Session / User (RestApi.kt / Models.kt)

struct UserDto: Codable, Equatable, Sendable {
    var sessionId: String?
    var userName: String = ""
    var gender: String = ""
    var age: Int = 0
    var country: String = ""
    var isoCountryCode: String = ""
}

struct SessionResponse: Codable, Equatable, Sendable {
    var loggedIn: Bool = false
    var sessionId: String?
    var user: UserDto?
}

struct LogoutResponse: Codable, Equatable, Sendable {
    var success: Bool = false
}

// MARK: - Chat / Listen (Socket / Models.kt)

struct ChatMessageDto: Codable, Equatable, Sendable {
    var from: String = ""
    var to: String?
    var message: String = ""
    var messageId: String?
    var timestamp: String = ""
    var read: Bool = false
    var isImage: Bool = false
    var imageType: String?
    var imageUrl: String?
    var imageCode: String?
}

struct HistoryItemDto: Codable, Equatable, Sendable {
    var userName: String = ""
    var lastMessage: ChatMessageDto?
}

struct InboxItemDto: Codable, Equatable, Sendable {
    var userName: String = ""
    var unreadCount: Int = 0
}

// MARK: - REST (Models.kt)

struct CountryOption: Equatable, Sendable {
    var englishName: String
    var displayName: String
    var isoCode: String
}

struct FeedbackItemDto: Codable, Equatable, Sendable {
    var id: String = ""
    var name: String?
    var age: Int?
    var country: String?
    var gender: String?
    var comment: String = ""
    var createdAt: String = ""
}

struct FeedbackResponse: Codable, Equatable, Sendable {
    var items: [FeedbackItemDto] = []
    var admin: Bool = false
}

struct FeedbackAdminStatusResponse: Codable, Equatable, Sendable {
    var authenticated: Bool = false
    var username: String?
}

struct FeedbackRequest: Codable, Equatable, Sendable {
    var name: String = ""
    var age: Int?
    var country: String = ""
    var gender: String = ""
    var comment: String = ""
}

struct FeedbackAdminLoginRequest: Codable, Equatable, Sendable {
    var username: String = ""
    var password: String = ""
}

struct PartnerLinkDto: Codable, Equatable, Sendable {
    var pageName: String = ""
    var url: String = ""

    enum CodingKeys: String, CodingKey {
        case pageName = "Page Name"
        case url
    }
}

struct ImageUploadResponse: Codable, Equatable, Sendable {
    var success: Bool = false
    var code: String?
    var url: String?
    var error: String?
}
