// Generated by Create API
// https://github.com/CreateAPI/CreateAPI

import Foundation
import Get
import URLQueryEncoder

extension Paths.Studio {
    public var listProjects: ListProjects {
        ListProjects(path: path + "/list-projects")
    }

    public struct ListProjects {
        /// Path: `/api/studio/list-projects`
        public let path: String

        /// List Projects
        ///
        /// Get a list of StudioProjects owned by the current user.
        /// 
        /// Args:
        ///     cursor: Optional cursor for pagination
        ///     limit: Number of items to return per page (default: 20)
        ///     name: Optional filter by project name
        ///     archived: Optional filter by archived status (default: False)
        ///     bookmarked: Optional filter by bookmarked status (default: None, returns all)
        ///     sort_order: Sort order for updated_at field - 'asc' or 'desc' (default: 'desc')
        public func get(parameters: GetParameters? = nil) -> Request<[GenAPI.StudioProjectMetaSchema]> {
            Request(path: path, method: "GET", query: parameters?.asQuery, id: "studio_api_bots_studio_api_list_projects")
        }

        public struct GetParameters {
            public var cursor: String?
            public var limit: Int?
            public var name: String?
            public var archived: Bool?
            public var bookmarked: Bool?
            public var sortOrder: String?

            public init(cursor: String? = nil, limit: Int? = nil, name: String? = nil, archived: Bool? = nil, bookmarked: Bool? = nil, sortOrder: String? = nil) {
                self.cursor = cursor
                self.limit = limit
                self.name = name
                self.archived = archived
                self.bookmarked = bookmarked
                self.sortOrder = sortOrder
            }

            public var asQuery: [(String, String?)] {
                let encoder = URLQueryEncoder()
                encoder.encode(cursor, forKey: "cursor")
                encoder.encode(limit, forKey: "limit")
                encoder.encode(name, forKey: "name")
                encoder.encode(archived, forKey: "archived")
                encoder.encode(bookmarked, forKey: "bookmarked")
                encoder.encode(sortOrder, forKey: "sort_order")
                return encoder.items
            }
        }
    }
}
