import Foundation

public struct CommentUserMention: Codable, Equatable, Hashable {
    public let start: Int
    public let end: Int
    public let handle: String
    public let displayName: String?

    public init(start: Int, end: Int, handle: String, displayName: String? = nil) {
        self.start = start
        self.end = end
        self.handle = handle
        self.displayName = displayName
    }

    init(_ remote: Components.Schemas.CommentUserMention) throws {
        guard let start = remote.start,
              let end = remote.end,
              let handle = remote.handle
        else {
            throw CommentUserMentionError.decodingFailed
        }
        self.start = start
        self.end = end
        self.handle = handle
        self.displayName = remote.display_name
    }

    enum CommentUserMentionError: Error {
        case decodingFailed
    }
}

public extension CommentUserMention {
    init(_ remote: GenAPI.CommentMention) {
        self.start = remote.start
        self.end = remote.end
        self.handle = remote.handle
        self.displayName = remote.displayName
    }
}
