import { queryParams, type RouteQueryOptions, type RouteDefinition, type RouteFormDefinition, applyUrlDefaults } from './../../../../../wayfinder'
/**
* @see \App\Http\Controllers\Api\ReactionController::index
* @see app/Http/Controllers/Api/ReactionController.php:26
* @route '/api/reactions/{reactableType}/{reactableId}'
*/
export const index = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: index.url(args, options),
    method: 'get',
})

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

/**
* @see \App\Http\Controllers\Api\ReactionController::index
* @see app/Http/Controllers/Api/ReactionController.php:26
* @route '/api/reactions/{reactableType}/{reactableId}'
*/
index.url = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions) => {
    if (Array.isArray(args)) {
        args = {
            reactableType: args[0],
            reactableId: args[1],
        }
    }

    args = applyUrlDefaults(args)

    const parsedArgs = {
        reactableType: args.reactableType,
        reactableId: args.reactableId,
    }

    return index.definition.url
            .replace('{reactableType}', parsedArgs.reactableType.toString())
            .replace('{reactableId}', parsedArgs.reactableId.toString())
            .replace(/\/+$/, '') + queryParams(options)
}

/**
* @see \App\Http\Controllers\Api\ReactionController::index
* @see app/Http/Controllers/Api/ReactionController.php:26
* @route '/api/reactions/{reactableType}/{reactableId}'
*/
index.get = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: index.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::index
* @see app/Http/Controllers/Api/ReactionController.php:26
* @route '/api/reactions/{reactableType}/{reactableId}'
*/
index.head = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: index.url(args, options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::index
* @see app/Http/Controllers/Api/ReactionController.php:26
* @route '/api/reactions/{reactableType}/{reactableId}'
*/
const indexForm = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: index.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::index
* @see app/Http/Controllers/Api/ReactionController.php:26
* @route '/api/reactions/{reactableType}/{reactableId}'
*/
indexForm.get = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: index.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::index
* @see app/Http/Controllers/Api/ReactionController.php:26
* @route '/api/reactions/{reactableType}/{reactableId}'
*/
indexForm.head = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: index.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

index.form = indexForm

/**
* @see \App\Http\Controllers\Api\ReactionController::like
* @see app/Http/Controllers/Api/ReactionController.php:45
* @route '/api/reactions/{reactableType}/{reactableId}/like'
*/
export const like = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: like.url(args, options),
    method: 'post',
})

like.definition = {
    methods: ["post"],
    url: '/api/reactions/{reactableType}/{reactableId}/like',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Api\ReactionController::like
* @see app/Http/Controllers/Api/ReactionController.php:45
* @route '/api/reactions/{reactableType}/{reactableId}/like'
*/
like.url = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions) => {
    if (Array.isArray(args)) {
        args = {
            reactableType: args[0],
            reactableId: args[1],
        }
    }

    args = applyUrlDefaults(args)

    const parsedArgs = {
        reactableType: args.reactableType,
        reactableId: args.reactableId,
    }

    return like.definition.url
            .replace('{reactableType}', parsedArgs.reactableType.toString())
            .replace('{reactableId}', parsedArgs.reactableId.toString())
            .replace(/\/+$/, '') + queryParams(options)
}

/**
* @see \App\Http\Controllers\Api\ReactionController::like
* @see app/Http/Controllers/Api/ReactionController.php:45
* @route '/api/reactions/{reactableType}/{reactableId}/like'
*/
like.post = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: like.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::like
* @see app/Http/Controllers/Api/ReactionController.php:45
* @route '/api/reactions/{reactableType}/{reactableId}/like'
*/
const likeForm = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: like.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::like
* @see app/Http/Controllers/Api/ReactionController.php:45
* @route '/api/reactions/{reactableType}/{reactableId}/like'
*/
likeForm.post = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: like.url(args, options),
    method: 'post',
})

like.form = likeForm

/**
* @see \App\Http\Controllers\Api\ReactionController::dislike
* @see app/Http/Controllers/Api/ReactionController.php:64
* @route '/api/reactions/{reactableType}/{reactableId}/dislike'
*/
export const dislike = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: dislike.url(args, options),
    method: 'post',
})

dislike.definition = {
    methods: ["post"],
    url: '/api/reactions/{reactableType}/{reactableId}/dislike',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Api\ReactionController::dislike
* @see app/Http/Controllers/Api/ReactionController.php:64
* @route '/api/reactions/{reactableType}/{reactableId}/dislike'
*/
dislike.url = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions) => {
    if (Array.isArray(args)) {
        args = {
            reactableType: args[0],
            reactableId: args[1],
        }
    }

    args = applyUrlDefaults(args)

    const parsedArgs = {
        reactableType: args.reactableType,
        reactableId: args.reactableId,
    }

    return dislike.definition.url
            .replace('{reactableType}', parsedArgs.reactableType.toString())
            .replace('{reactableId}', parsedArgs.reactableId.toString())
            .replace(/\/+$/, '') + queryParams(options)
}

/**
* @see \App\Http\Controllers\Api\ReactionController::dislike
* @see app/Http/Controllers/Api/ReactionController.php:64
* @route '/api/reactions/{reactableType}/{reactableId}/dislike'
*/
dislike.post = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: dislike.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::dislike
* @see app/Http/Controllers/Api/ReactionController.php:64
* @route '/api/reactions/{reactableType}/{reactableId}/dislike'
*/
const dislikeForm = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: dislike.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::dislike
* @see app/Http/Controllers/Api/ReactionController.php:64
* @route '/api/reactions/{reactableType}/{reactableId}/dislike'
*/
dislikeForm.post = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: dislike.url(args, options),
    method: 'post',
})

dislike.form = dislikeForm

/**
* @see \App\Http\Controllers\Api\ReactionController::users
* @see app/Http/Controllers/Api/ReactionController.php:83
* @route '/api/reactions/{reactableType}/{reactableId}/users'
*/
export const users = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: users.url(args, options),
    method: 'get',
})

users.definition = {
    methods: ["get","head"],
    url: '/api/reactions/{reactableType}/{reactableId}/users',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\Api\ReactionController::users
* @see app/Http/Controllers/Api/ReactionController.php:83
* @route '/api/reactions/{reactableType}/{reactableId}/users'
*/
users.url = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions) => {
    if (Array.isArray(args)) {
        args = {
            reactableType: args[0],
            reactableId: args[1],
        }
    }

    args = applyUrlDefaults(args)

    const parsedArgs = {
        reactableType: args.reactableType,
        reactableId: args.reactableId,
    }

    return users.definition.url
            .replace('{reactableType}', parsedArgs.reactableType.toString())
            .replace('{reactableId}', parsedArgs.reactableId.toString())
            .replace(/\/+$/, '') + queryParams(options)
}

/**
* @see \App\Http\Controllers\Api\ReactionController::users
* @see app/Http/Controllers/Api/ReactionController.php:83
* @route '/api/reactions/{reactableType}/{reactableId}/users'
*/
users.get = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: users.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::users
* @see app/Http/Controllers/Api/ReactionController.php:83
* @route '/api/reactions/{reactableType}/{reactableId}/users'
*/
users.head = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: users.url(args, options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::users
* @see app/Http/Controllers/Api/ReactionController.php:83
* @route '/api/reactions/{reactableType}/{reactableId}/users'
*/
const usersForm = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: users.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::users
* @see app/Http/Controllers/Api/ReactionController.php:83
* @route '/api/reactions/{reactableType}/{reactableId}/users'
*/
usersForm.get = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: users.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Api\ReactionController::users
* @see app/Http/Controllers/Api/ReactionController.php:83
* @route '/api/reactions/{reactableType}/{reactableId}/users'
*/
usersForm.head = (args: { reactableType: string | number, reactableId: string | number } | [reactableType: string | number, reactableId: string | number ], options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: users.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

users.form = usersForm

const ReactionController = { index, like, dislike, users }

export default ReactionController