import { queryParams, type RouteQueryOptions, type RouteDefinition, applyUrlDefaults } from './../../../../wayfinder'
/**
* @see \App\Http\Controllers\OrderController::shopifySync
* @see app/Http/Controllers/OrderController.php:51
* @route '/orders/shopifySync'
*/
export const shopifySync = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: shopifySync.url(options),
    method: 'post',
})

shopifySync.definition = {
    methods: ["post"],
    url: '/orders/shopifySync',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\OrderController::shopifySync
* @see app/Http/Controllers/OrderController.php:51
* @route '/orders/shopifySync'
*/
shopifySync.url = (options?: RouteQueryOptions) => {
    return shopifySync.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\OrderController::shopifySync
* @see app/Http/Controllers/OrderController.php:51
* @route '/orders/shopifySync'
*/
shopifySync.post = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: shopifySync.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\OrderController::getOrder
* @see app/Http/Controllers/OrderController.php:21
* @route '/orders/{order}'
*/
export const getOrder = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: getOrder.url(args, options),
    method: 'get',
})

getOrder.definition = {
    methods: ["get","head"],
    url: '/orders/{order}',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\OrderController::getOrder
* @see app/Http/Controllers/OrderController.php:21
* @route '/orders/{order}'
*/
getOrder.url = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { order: args }
    }

    if (typeof args === 'object' && !Array.isArray(args) && 'id' in args) {
        args = { order: args.id }
    }

    if (Array.isArray(args)) {
        args = {
            order: args[0],
        }
    }

    args = applyUrlDefaults(args)

    const parsedArgs = {
        order: typeof args.order === 'object'
        ? args.order.id
        : args.order,
    }

    return getOrder.definition.url
            .replace('{order}', parsedArgs.order.toString())
            .replace(/\/+$/, '') + queryParams(options)
}

/**
* @see \App\Http\Controllers\OrderController::getOrder
* @see app/Http/Controllers/OrderController.php:21
* @route '/orders/{order}'
*/
getOrder.get = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: getOrder.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\OrderController::getOrder
* @see app/Http/Controllers/OrderController.php:21
* @route '/orders/{order}'
*/
getOrder.head = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: getOrder.url(args, options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\OrderController::getCheckIn
* @see app/Http/Controllers/OrderController.php:27
* @route '/orders/{order}/checkIn'
*/
export const getCheckIn = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: getCheckIn.url(args, options),
    method: 'get',
})

getCheckIn.definition = {
    methods: ["get","head"],
    url: '/orders/{order}/checkIn',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\OrderController::getCheckIn
* @see app/Http/Controllers/OrderController.php:27
* @route '/orders/{order}/checkIn'
*/
getCheckIn.url = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { order: args }
    }

    if (typeof args === 'object' && !Array.isArray(args) && 'id' in args) {
        args = { order: args.id }
    }

    if (Array.isArray(args)) {
        args = {
            order: args[0],
        }
    }

    args = applyUrlDefaults(args)

    const parsedArgs = {
        order: typeof args.order === 'object'
        ? args.order.id
        : args.order,
    }

    return getCheckIn.definition.url
            .replace('{order}', parsedArgs.order.toString())
            .replace(/\/+$/, '') + queryParams(options)
}

/**
* @see \App\Http\Controllers\OrderController::getCheckIn
* @see app/Http/Controllers/OrderController.php:27
* @route '/orders/{order}/checkIn'
*/
getCheckIn.get = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: getCheckIn.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\OrderController::getCheckIn
* @see app/Http/Controllers/OrderController.php:27
* @route '/orders/{order}/checkIn'
*/
getCheckIn.head = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: getCheckIn.url(args, options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\OrderController::checkIn
* @see app/Http/Controllers/OrderController.php:38
* @route '/orders/{order}/checkIn'
*/
export const checkIn = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: checkIn.url(args, options),
    method: 'post',
})

checkIn.definition = {
    methods: ["post"],
    url: '/orders/{order}/checkIn',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\OrderController::checkIn
* @see app/Http/Controllers/OrderController.php:38
* @route '/orders/{order}/checkIn'
*/
checkIn.url = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { order: args }
    }

    if (typeof args === 'object' && !Array.isArray(args) && 'id' in args) {
        args = { order: args.id }
    }

    if (Array.isArray(args)) {
        args = {
            order: args[0],
        }
    }

    args = applyUrlDefaults(args)

    const parsedArgs = {
        order: typeof args.order === 'object'
        ? args.order.id
        : args.order,
    }

    return checkIn.definition.url
            .replace('{order}', parsedArgs.order.toString())
            .replace(/\/+$/, '') + queryParams(options)
}

/**
* @see \App\Http\Controllers\OrderController::checkIn
* @see app/Http/Controllers/OrderController.php:38
* @route '/orders/{order}/checkIn'
*/
checkIn.post = (args: { order: number | { id: number } } | [order: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: checkIn.url(args, options),
    method: 'post',
})

const OrderController = { shopifySync, getOrder, getCheckIn, checkIn }

export default OrderController