///
/// MediaInfoResult.swift
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © 2025 Marc Rousavy @ Margelo
///

import NitroModules

/**
 * Represents an instance of `MediaInfoResult`, backed by a C++ struct.
 */
public typealias MediaInfoResult = margelo.nitro.nitromediakit.MediaInfoResult

public extension MediaInfoResult {
  private typealias bridge = margelo.nitro.nitromediakit.bridge.swift

  /**
   * Create a new instance of `MediaInfoResult`.
   */
  init(ok: Bool, operation: OperationType, type: MediaType, inputUri: String?, outputUri: String?, media: MediaInfoMedia?, warnings: [MediaInfoWarning]?, error: MediaInfoError?) {
    self.init(ok, operation, type, { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = inputUri {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__string_ in
      if let __unwrappedValue = outputUri {
        return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_MediaInfoMedia_ in
      if let __unwrappedValue = media {
        return bridge.create_std__optional_MediaInfoMedia_(__unwrappedValue)
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_std__vector_MediaInfoWarning__ in
      if let __unwrappedValue = warnings {
        return bridge.create_std__optional_std__vector_MediaInfoWarning__(__unwrappedValue.withUnsafeBufferPointer { __pointer -> bridge.std__vector_MediaInfoWarning_ in
          return bridge.copy_std__vector_MediaInfoWarning_(__pointer.baseAddress!, __unwrappedValue.count)
        })
      } else {
        return .init()
      }
    }(), { () -> bridge.std__optional_MediaInfoError_ in
      if let __unwrappedValue = error {
        return bridge.create_std__optional_MediaInfoError_(__unwrappedValue)
      } else {
        return .init()
      }
    }())
  }

  var ok: Bool {
    @inline(__always)
    get {
      return self.__ok
    }
    @inline(__always)
    set {
      self.__ok = newValue
    }
  }
  
  var operation: OperationType {
    @inline(__always)
    get {
      return self.__operation
    }
    @inline(__always)
    set {
      self.__operation = newValue
    }
  }
  
  var type: MediaType {
    @inline(__always)
    get {
      return self.__type
    }
    @inline(__always)
    set {
      self.__type = newValue
    }
  }
  
  var inputUri: String? {
    @inline(__always)
    get {
      return { () -> String? in
        if bridge.has_value_std__optional_std__string_(self.__inputUri) {
          let __unwrapped = bridge.get_std__optional_std__string_(self.__inputUri)
          return String(__unwrapped)
        } else {
          return nil
        }
      }()
    }
    @inline(__always)
    set {
      self.__inputUri = { () -> bridge.std__optional_std__string_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
        } else {
          return .init()
        }
      }()
    }
  }
  
  var outputUri: String? {
    @inline(__always)
    get {
      return { () -> String? in
        if bridge.has_value_std__optional_std__string_(self.__outputUri) {
          let __unwrapped = bridge.get_std__optional_std__string_(self.__outputUri)
          return String(__unwrapped)
        } else {
          return nil
        }
      }()
    }
    @inline(__always)
    set {
      self.__outputUri = { () -> bridge.std__optional_std__string_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
        } else {
          return .init()
        }
      }()
    }
  }
  
  var media: MediaInfoMedia? {
    @inline(__always)
    get {
      return self.__media.value
    }
    @inline(__always)
    set {
      self.__media = { () -> bridge.std__optional_MediaInfoMedia_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_MediaInfoMedia_(__unwrappedValue)
        } else {
          return .init()
        }
      }()
    }
  }
  
  var warnings: [MediaInfoWarning]? {
    @inline(__always)
    get {
      return { () -> [MediaInfoWarning]? in
        if bridge.has_value_std__optional_std__vector_MediaInfoWarning__(self.__warnings) {
          let __unwrapped = bridge.get_std__optional_std__vector_MediaInfoWarning__(self.__warnings)
          return { () -> [MediaInfoWarning] in
            let __data = bridge.get_data_std__vector_MediaInfoWarning_(__unwrapped)
            let __size = __unwrapped.size()
            return Array(UnsafeBufferPointer(start: __data, count: __size))
          }()
        } else {
          return nil
        }
      }()
    }
    @inline(__always)
    set {
      self.__warnings = { () -> bridge.std__optional_std__vector_MediaInfoWarning__ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_std__vector_MediaInfoWarning__(__unwrappedValue.withUnsafeBufferPointer { __pointer -> bridge.std__vector_MediaInfoWarning_ in
            return bridge.copy_std__vector_MediaInfoWarning_(__pointer.baseAddress!, __unwrappedValue.count)
          })
        } else {
          return .init()
        }
      }()
    }
  }
  
  var error: MediaInfoError? {
    @inline(__always)
    get {
      return self.__error.value
    }
    @inline(__always)
    set {
      self.__error = { () -> bridge.std__optional_MediaInfoError_ in
        if let __unwrappedValue = newValue {
          return bridge.create_std__optional_MediaInfoError_(__unwrappedValue)
        } else {
          return .init()
        }
      }()
    }
  }
}
