import { queryParams, type RouteQueryOptions, type RouteDefinition, type RouteFormDefinition, applyUrlDefaults } from './../../../../../wayfinder'
/**
* @see \App\Http\Controllers\Api\ChatController::getOnboardingChat
* @see app/Http/Controllers/Api/ChatController.php:493
* @route '/api/chat/onboarding'
*/
export const getOnboardingChat = (options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: getOnboardingChat.url(options),
    method: 'get',
})

getOnboardingChat.definition = {
    methods: ["get","head"],
    url: '/api/chat/onboarding',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\Api\ChatController::getOnboardingChat
* @see app/Http/Controllers/Api/ChatController.php:493
* @route '/api/chat/onboarding'
*/
getOnboardingChat.url = (options?: RouteQueryOptions) => {
    return getOnboardingChat.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Api\ChatController::getOnboardingChat
* @see app/Http/Controllers/Api/ChatController.php:493
* @route '/api/chat/onboarding'
*/
getOnboardingChat.get = (options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: getOnboardingChat.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::getOnboardingChat
* @see app/Http/Controllers/Api/ChatController.php:493
* @route '/api/chat/onboarding'
*/
getOnboardingChat.head = (options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: getOnboardingChat.url(options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Api\ChatController::getOnboardingChat
* @see app/Http/Controllers/Api/ChatController.php:493
* @route '/api/chat/onboarding'
*/
const getOnboardingChatForm = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: getOnboardingChat.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::getOnboardingChat
* @see app/Http/Controllers/Api/ChatController.php:493
* @route '/api/chat/onboarding'
*/
getOnboardingChatForm.get = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: getOnboardingChat.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::getOnboardingChat
* @see app/Http/Controllers/Api/ChatController.php:493
* @route '/api/chat/onboarding'
*/
getOnboardingChatForm.head = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: getOnboardingChat.url({
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

getOnboardingChat.form = getOnboardingChatForm

/**
* @see \App\Http\Controllers\Api\ChatController::createEntityChat
* @see app/Http/Controllers/Api/ChatController.php:462
* @route '/api/chat/entity-chat'
*/
export const createEntityChat = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: createEntityChat.url(options),
    method: 'post',
})

createEntityChat.definition = {
    methods: ["post"],
    url: '/api/chat/entity-chat',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Api\ChatController::createEntityChat
* @see app/Http/Controllers/Api/ChatController.php:462
* @route '/api/chat/entity-chat'
*/
createEntityChat.url = (options?: RouteQueryOptions) => {
    return createEntityChat.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Api\ChatController::createEntityChat
* @see app/Http/Controllers/Api/ChatController.php:462
* @route '/api/chat/entity-chat'
*/
createEntityChat.post = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: createEntityChat.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::createEntityChat
* @see app/Http/Controllers/Api/ChatController.php:462
* @route '/api/chat/entity-chat'
*/
const createEntityChatForm = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: createEntityChat.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::createEntityChat
* @see app/Http/Controllers/Api/ChatController.php:462
* @route '/api/chat/entity-chat'
*/
createEntityChatForm.post = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: createEntityChat.url(options),
    method: 'post',
})

createEntityChat.form = createEntityChatForm

/**
* @see \App\Http\Controllers\Api\ChatController::index
* @see app/Http/Controllers/Api/ChatController.php:24
* @route '/api/chat/sessions'
*/
export const index = (options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: index.url(options),
    method: 'get',
})

index.definition = {
    methods: ["get","head"],
    url: '/api/chat/sessions',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\Api\ChatController::index
* @see app/Http/Controllers/Api/ChatController.php:24
* @route '/api/chat/sessions'
*/
index.url = (options?: RouteQueryOptions) => {
    return index.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Api\ChatController::index
* @see app/Http/Controllers/Api/ChatController.php:24
* @route '/api/chat/sessions'
*/
index.get = (options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: index.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::index
* @see app/Http/Controllers/Api/ChatController.php:24
* @route '/api/chat/sessions'
*/
index.head = (options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: index.url(options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Api\ChatController::index
* @see app/Http/Controllers/Api/ChatController.php:24
* @route '/api/chat/sessions'
*/
const indexForm = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: index.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::index
* @see app/Http/Controllers/Api/ChatController.php:24
* @route '/api/chat/sessions'
*/
indexForm.get = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: index.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::index
* @see app/Http/Controllers/Api/ChatController.php:24
* @route '/api/chat/sessions'
*/
indexForm.head = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: index.url({
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

index.form = indexForm

/**
* @see \App\Http\Controllers\Api\ChatController::store
* @see app/Http/Controllers/Api/ChatController.php:64
* @route '/api/chat/sessions'
*/
export const store = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: store.url(options),
    method: 'post',
})

store.definition = {
    methods: ["post"],
    url: '/api/chat/sessions',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Api\ChatController::store
* @see app/Http/Controllers/Api/ChatController.php:64
* @route '/api/chat/sessions'
*/
store.url = (options?: RouteQueryOptions) => {
    return store.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Api\ChatController::store
* @see app/Http/Controllers/Api/ChatController.php:64
* @route '/api/chat/sessions'
*/
store.post = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: store.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::store
* @see app/Http/Controllers/Api/ChatController.php:64
* @route '/api/chat/sessions'
*/
const storeForm = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: store.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::store
* @see app/Http/Controllers/Api/ChatController.php:64
* @route '/api/chat/sessions'
*/
storeForm.post = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: store.url(options),
    method: 'post',
})

store.form = storeForm

/**
* @see \App\Http\Controllers\Api\ChatController::show
* @see app/Http/Controllers/Api/ChatController.php:87
* @route '/api/chat/sessions/{session}'
*/
export const show = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: show.url(args, options),
    method: 'get',
})

show.definition = {
    methods: ["get","head"],
    url: '/api/chat/sessions/{session}',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\Api\ChatController::show
* @see app/Http/Controllers/Api/ChatController.php:87
* @route '/api/chat/sessions/{session}'
*/
show.url = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { session: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Api\ChatController::show
* @see app/Http/Controllers/Api/ChatController.php:87
* @route '/api/chat/sessions/{session}'
*/
show.get = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: show.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::show
* @see app/Http/Controllers/Api/ChatController.php:87
* @route '/api/chat/sessions/{session}'
*/
show.head = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: show.url(args, options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Api\ChatController::show
* @see app/Http/Controllers/Api/ChatController.php:87
* @route '/api/chat/sessions/{session}'
*/
const showForm = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: show.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::show
* @see app/Http/Controllers/Api/ChatController.php:87
* @route '/api/chat/sessions/{session}'
*/
showForm.get = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: show.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::show
* @see app/Http/Controllers/Api/ChatController.php:87
* @route '/api/chat/sessions/{session}'
*/
showForm.head = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: show.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

show.form = showForm

/**
* @see \App\Http\Controllers\Api\ChatController::messages
* @see app/Http/Controllers/Api/ChatController.php:394
* @route '/api/chat/sessions/{session}/messages'
*/
export const messages = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: messages.url(args, options),
    method: 'get',
})

messages.definition = {
    methods: ["get","head"],
    url: '/api/chat/sessions/{session}/messages',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\Api\ChatController::messages
* @see app/Http/Controllers/Api/ChatController.php:394
* @route '/api/chat/sessions/{session}/messages'
*/
messages.url = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { session: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Api\ChatController::messages
* @see app/Http/Controllers/Api/ChatController.php:394
* @route '/api/chat/sessions/{session}/messages'
*/
messages.get = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: messages.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::messages
* @see app/Http/Controllers/Api/ChatController.php:394
* @route '/api/chat/sessions/{session}/messages'
*/
messages.head = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: messages.url(args, options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Api\ChatController::messages
* @see app/Http/Controllers/Api/ChatController.php:394
* @route '/api/chat/sessions/{session}/messages'
*/
const messagesForm = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: messages.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::messages
* @see app/Http/Controllers/Api/ChatController.php:394
* @route '/api/chat/sessions/{session}/messages'
*/
messagesForm.get = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: messages.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::messages
* @see app/Http/Controllers/Api/ChatController.php:394
* @route '/api/chat/sessions/{session}/messages'
*/
messagesForm.head = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: messages.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

messages.form = messagesForm

/**
* @see \App\Http\Controllers\Api\ChatController::storeMessage
* @see app/Http/Controllers/Api/ChatController.php:126
* @route '/api/chat/sessions/{session}/messages'
*/
export const storeMessage = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: storeMessage.url(args, options),
    method: 'post',
})

storeMessage.definition = {
    methods: ["post"],
    url: '/api/chat/sessions/{session}/messages',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Api\ChatController::storeMessage
* @see app/Http/Controllers/Api/ChatController.php:126
* @route '/api/chat/sessions/{session}/messages'
*/
storeMessage.url = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { session: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Api\ChatController::storeMessage
* @see app/Http/Controllers/Api/ChatController.php:126
* @route '/api/chat/sessions/{session}/messages'
*/
storeMessage.post = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: storeMessage.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::storeMessage
* @see app/Http/Controllers/Api/ChatController.php:126
* @route '/api/chat/sessions/{session}/messages'
*/
const storeMessageForm = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: storeMessage.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::storeMessage
* @see app/Http/Controllers/Api/ChatController.php:126
* @route '/api/chat/sessions/{session}/messages'
*/
storeMessageForm.post = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: storeMessage.url(args, options),
    method: 'post',
})

storeMessage.form = storeMessageForm

/**
* @see \App\Http\Controllers\Api\ChatController::getInvitableUsers
* @see app/Http/Controllers/Api/ChatController.php:354
* @route '/api/chat/sessions/{session}/invitable-users'
*/
export const getInvitableUsers = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: getInvitableUsers.url(args, options),
    method: 'get',
})

getInvitableUsers.definition = {
    methods: ["get","head"],
    url: '/api/chat/sessions/{session}/invitable-users',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\Api\ChatController::getInvitableUsers
* @see app/Http/Controllers/Api/ChatController.php:354
* @route '/api/chat/sessions/{session}/invitable-users'
*/
getInvitableUsers.url = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { session: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Api\ChatController::getInvitableUsers
* @see app/Http/Controllers/Api/ChatController.php:354
* @route '/api/chat/sessions/{session}/invitable-users'
*/
getInvitableUsers.get = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: getInvitableUsers.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::getInvitableUsers
* @see app/Http/Controllers/Api/ChatController.php:354
* @route '/api/chat/sessions/{session}/invitable-users'
*/
getInvitableUsers.head = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: getInvitableUsers.url(args, options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Api\ChatController::getInvitableUsers
* @see app/Http/Controllers/Api/ChatController.php:354
* @route '/api/chat/sessions/{session}/invitable-users'
*/
const getInvitableUsersForm = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: getInvitableUsers.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::getInvitableUsers
* @see app/Http/Controllers/Api/ChatController.php:354
* @route '/api/chat/sessions/{session}/invitable-users'
*/
getInvitableUsersForm.get = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: getInvitableUsers.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ChatController::getInvitableUsers
* @see app/Http/Controllers/Api/ChatController.php:354
* @route '/api/chat/sessions/{session}/invitable-users'
*/
getInvitableUsersForm.head = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: getInvitableUsers.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

getInvitableUsers.form = getInvitableUsersForm

/**
* @see \App\Http\Controllers\Api\ChatController::addUsers
* @see app/Http/Controllers/Api/ChatController.php:168
* @route '/api/chat/sessions/{session}/add-users'
*/
export const addUsers = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: addUsers.url(args, options),
    method: 'post',
})

addUsers.definition = {
    methods: ["post"],
    url: '/api/chat/sessions/{session}/add-users',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Api\ChatController::addUsers
* @see app/Http/Controllers/Api/ChatController.php:168
* @route '/api/chat/sessions/{session}/add-users'
*/
addUsers.url = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { session: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Api\ChatController::addUsers
* @see app/Http/Controllers/Api/ChatController.php:168
* @route '/api/chat/sessions/{session}/add-users'
*/
addUsers.post = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: addUsers.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::addUsers
* @see app/Http/Controllers/Api/ChatController.php:168
* @route '/api/chat/sessions/{session}/add-users'
*/
const addUsersForm = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: addUsers.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::addUsers
* @see app/Http/Controllers/Api/ChatController.php:168
* @route '/api/chat/sessions/{session}/add-users'
*/
addUsersForm.post = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: addUsers.url(args, options),
    method: 'post',
})

addUsers.form = addUsersForm

/**
* @see \App\Http\Controllers\Api\ChatController::removeUsers
* @see app/Http/Controllers/Api/ChatController.php:261
* @route '/api/chat/sessions/{session}/remove-users'
*/
export const removeUsers = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'delete'> => ({
    url: removeUsers.url(args, options),
    method: 'delete',
})

removeUsers.definition = {
    methods: ["delete"],
    url: '/api/chat/sessions/{session}/remove-users',
} satisfies RouteDefinition<["delete"]>

/**
* @see \App\Http\Controllers\Api\ChatController::removeUsers
* @see app/Http/Controllers/Api/ChatController.php:261
* @route '/api/chat/sessions/{session}/remove-users'
*/
removeUsers.url = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { session: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Api\ChatController::removeUsers
* @see app/Http/Controllers/Api/ChatController.php:261
* @route '/api/chat/sessions/{session}/remove-users'
*/
removeUsers.delete = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'delete'> => ({
    url: removeUsers.url(args, options),
    method: 'delete',
})

/**
* @see \App\Http\Controllers\Api\ChatController::removeUsers
* @see app/Http/Controllers/Api/ChatController.php:261
* @route '/api/chat/sessions/{session}/remove-users'
*/
const removeUsersForm = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: removeUsers.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'DELETE',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::removeUsers
* @see app/Http/Controllers/Api/ChatController.php:261
* @route '/api/chat/sessions/{session}/remove-users'
*/
removeUsersForm.delete = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: removeUsers.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'DELETE',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

removeUsers.form = removeUsersForm

/**
* @see \App\Http\Controllers\Api\ChatController::updateStatus
* @see app/Http/Controllers/Api/ChatController.php:432
* @route '/api/chat/sessions/{session}/status'
*/
export const updateStatus = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'patch'> => ({
    url: updateStatus.url(args, options),
    method: 'patch',
})

updateStatus.definition = {
    methods: ["patch"],
    url: '/api/chat/sessions/{session}/status',
} satisfies RouteDefinition<["patch"]>

/**
* @see \App\Http\Controllers\Api\ChatController::updateStatus
* @see app/Http/Controllers/Api/ChatController.php:432
* @route '/api/chat/sessions/{session}/status'
*/
updateStatus.url = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { session: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Api\ChatController::updateStatus
* @see app/Http/Controllers/Api/ChatController.php:432
* @route '/api/chat/sessions/{session}/status'
*/
updateStatus.patch = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'patch'> => ({
    url: updateStatus.url(args, options),
    method: 'patch',
})

/**
* @see \App\Http\Controllers\Api\ChatController::updateStatus
* @see app/Http/Controllers/Api/ChatController.php:432
* @route '/api/chat/sessions/{session}/status'
*/
const updateStatusForm = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: updateStatus.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'PATCH',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ChatController::updateStatus
* @see app/Http/Controllers/Api/ChatController.php:432
* @route '/api/chat/sessions/{session}/status'
*/
updateStatusForm.patch = (args: { session: number | { id: number } } | [session: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: updateStatus.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'PATCH',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

updateStatus.form = updateStatusForm

const ChatController = { getOnboardingChat, createEntityChat, index, store, show, messages, storeMessage, getInvitableUsers, addUsers, removeUsers, updateStatus }

export default ChatController