import { queryParams, type RouteQueryOptions, type RouteDefinition, type RouteFormDefinition, applyUrlDefaults } from './../../../../../wayfinder'
/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::show
* @see app/Http/Controllers/Customer/CustomerPortalController.php:36
* @route '/portal'
*/
export const show = (options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: show.url(options),
    method: 'get',
})

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

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::show
* @see app/Http/Controllers/Customer/CustomerPortalController.php:36
* @route '/portal'
*/
show.url = (options?: RouteQueryOptions) => {
    return show.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::show
* @see app/Http/Controllers/Customer/CustomerPortalController.php:36
* @route '/portal'
*/
show.get = (options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: show.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::show
* @see app/Http/Controllers/Customer/CustomerPortalController.php:36
* @route '/portal'
*/
show.head = (options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: show.url(options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::show
* @see app/Http/Controllers/Customer/CustomerPortalController.php:36
* @route '/portal'
*/
const showForm = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: show.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::show
* @see app/Http/Controllers/Customer/CustomerPortalController.php:36
* @route '/portal'
*/
showForm.get = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: show.url(options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::show
* @see app/Http/Controllers/Customer/CustomerPortalController.php:36
* @route '/portal'
*/
showForm.head = (options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: show.url({
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

show.form = showForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::availableSlots
* @see app/Http/Controllers/Customer/CustomerPortalController.php:175
* @route '/portal/bookings/{booking}/available-slots'
*/
export const availableSlots = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: availableSlots.url(args, options),
    method: 'get',
})

availableSlots.definition = {
    methods: ["get","head"],
    url: '/portal/bookings/{booking}/available-slots',
} satisfies RouteDefinition<["get","head"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::availableSlots
* @see app/Http/Controllers/Customer/CustomerPortalController.php:175
* @route '/portal/bookings/{booking}/available-slots'
*/
availableSlots.url = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { booking: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::availableSlots
* @see app/Http/Controllers/Customer/CustomerPortalController.php:175
* @route '/portal/bookings/{booking}/available-slots'
*/
availableSlots.get = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'get'> => ({
    url: availableSlots.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::availableSlots
* @see app/Http/Controllers/Customer/CustomerPortalController.php:175
* @route '/portal/bookings/{booking}/available-slots'
*/
availableSlots.head = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'head'> => ({
    url: availableSlots.url(args, options),
    method: 'head',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::availableSlots
* @see app/Http/Controllers/Customer/CustomerPortalController.php:175
* @route '/portal/bookings/{booking}/available-slots'
*/
const availableSlotsForm = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: availableSlots.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::availableSlots
* @see app/Http/Controllers/Customer/CustomerPortalController.php:175
* @route '/portal/bookings/{booking}/available-slots'
*/
availableSlotsForm.get = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: availableSlots.url(args, options),
    method: 'get',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::availableSlots
* @see app/Http/Controllers/Customer/CustomerPortalController.php:175
* @route '/portal/bookings/{booking}/available-slots'
*/
availableSlotsForm.head = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({
    action: availableSlots.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'HEAD',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'get',
})

availableSlots.form = availableSlotsForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::reschedule
* @see app/Http/Controllers/Customer/CustomerPortalController.php:210
* @route '/portal/bookings/{booking}/reschedule'
*/
export const reschedule = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: reschedule.url(args, options),
    method: 'post',
})

reschedule.definition = {
    methods: ["post"],
    url: '/portal/bookings/{booking}/reschedule',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::reschedule
* @see app/Http/Controllers/Customer/CustomerPortalController.php:210
* @route '/portal/bookings/{booking}/reschedule'
*/
reschedule.url = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { booking: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::reschedule
* @see app/Http/Controllers/Customer/CustomerPortalController.php:210
* @route '/portal/bookings/{booking}/reschedule'
*/
reschedule.post = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: reschedule.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::reschedule
* @see app/Http/Controllers/Customer/CustomerPortalController.php:210
* @route '/portal/bookings/{booking}/reschedule'
*/
const rescheduleForm = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: reschedule.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::reschedule
* @see app/Http/Controllers/Customer/CustomerPortalController.php:210
* @route '/portal/bookings/{booking}/reschedule'
*/
rescheduleForm.post = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: reschedule.url(args, options),
    method: 'post',
})

reschedule.form = rescheduleForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::cancel
* @see app/Http/Controllers/Customer/CustomerPortalController.php:257
* @route '/portal/bookings/{booking}/cancel'
*/
export const cancel = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: cancel.url(args, options),
    method: 'post',
})

cancel.definition = {
    methods: ["post"],
    url: '/portal/bookings/{booking}/cancel',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::cancel
* @see app/Http/Controllers/Customer/CustomerPortalController.php:257
* @route '/portal/bookings/{booking}/cancel'
*/
cancel.url = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { booking: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::cancel
* @see app/Http/Controllers/Customer/CustomerPortalController.php:257
* @route '/portal/bookings/{booking}/cancel'
*/
cancel.post = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: cancel.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::cancel
* @see app/Http/Controllers/Customer/CustomerPortalController.php:257
* @route '/portal/bookings/{booking}/cancel'
*/
const cancelForm = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: cancel.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::cancel
* @see app/Http/Controllers/Customer/CustomerPortalController.php:257
* @route '/portal/bookings/{booking}/cancel'
*/
cancelForm.post = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: cancel.url(args, options),
    method: 'post',
})

cancel.form = cancelForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::markOnTheWay
* @see app/Http/Controllers/Customer/CustomerPortalController.php:300
* @route '/portal/bookings/{booking}/on-the-way'
*/
export const markOnTheWay = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: markOnTheWay.url(args, options),
    method: 'post',
})

markOnTheWay.definition = {
    methods: ["post"],
    url: '/portal/bookings/{booking}/on-the-way',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::markOnTheWay
* @see app/Http/Controllers/Customer/CustomerPortalController.php:300
* @route '/portal/bookings/{booking}/on-the-way'
*/
markOnTheWay.url = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { booking: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::markOnTheWay
* @see app/Http/Controllers/Customer/CustomerPortalController.php:300
* @route '/portal/bookings/{booking}/on-the-way'
*/
markOnTheWay.post = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: markOnTheWay.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::markOnTheWay
* @see app/Http/Controllers/Customer/CustomerPortalController.php:300
* @route '/portal/bookings/{booking}/on-the-way'
*/
const markOnTheWayForm = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: markOnTheWay.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::markOnTheWay
* @see app/Http/Controllers/Customer/CustomerPortalController.php:300
* @route '/portal/bookings/{booking}/on-the-way'
*/
markOnTheWayForm.post = (args: { booking: number | { id: number } } | [booking: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: markOnTheWay.url(args, options),
    method: 'post',
})

markOnTheWay.form = markOnTheWayForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::storeVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:345
* @route '/portal/vehicles'
*/
export const storeVehicle = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: storeVehicle.url(options),
    method: 'post',
})

storeVehicle.definition = {
    methods: ["post"],
    url: '/portal/vehicles',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::storeVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:345
* @route '/portal/vehicles'
*/
storeVehicle.url = (options?: RouteQueryOptions) => {
    return storeVehicle.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::storeVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:345
* @route '/portal/vehicles'
*/
storeVehicle.post = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: storeVehicle.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::storeVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:345
* @route '/portal/vehicles'
*/
const storeVehicleForm = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: storeVehicle.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::storeVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:345
* @route '/portal/vehicles'
*/
storeVehicleForm.post = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: storeVehicle.url(options),
    method: 'post',
})

storeVehicle.form = storeVehicleForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateProfile
* @see app/Http/Controllers/Customer/CustomerPortalController.php:389
* @route '/portal/profile'
*/
export const updateProfile = (options?: RouteQueryOptions): RouteDefinition<'patch'> => ({
    url: updateProfile.url(options),
    method: 'patch',
})

updateProfile.definition = {
    methods: ["patch"],
    url: '/portal/profile',
} satisfies RouteDefinition<["patch"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateProfile
* @see app/Http/Controllers/Customer/CustomerPortalController.php:389
* @route '/portal/profile'
*/
updateProfile.url = (options?: RouteQueryOptions) => {
    return updateProfile.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateProfile
* @see app/Http/Controllers/Customer/CustomerPortalController.php:389
* @route '/portal/profile'
*/
updateProfile.patch = (options?: RouteQueryOptions): RouteDefinition<'patch'> => ({
    url: updateProfile.url(options),
    method: 'patch',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateProfile
* @see app/Http/Controllers/Customer/CustomerPortalController.php:389
* @route '/portal/profile'
*/
const updateProfileForm = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: updateProfile.url({
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'PATCH',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateProfile
* @see app/Http/Controllers/Customer/CustomerPortalController.php:389
* @route '/portal/profile'
*/
updateProfileForm.patch = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: updateProfile.url({
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'PATCH',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

updateProfile.form = updateProfileForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updatePassword
* @see app/Http/Controllers/Customer/CustomerPortalController.php:407
* @route '/portal/password'
*/
export const updatePassword = (options?: RouteQueryOptions): RouteDefinition<'put'> => ({
    url: updatePassword.url(options),
    method: 'put',
})

updatePassword.definition = {
    methods: ["put"],
    url: '/portal/password',
} satisfies RouteDefinition<["put"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updatePassword
* @see app/Http/Controllers/Customer/CustomerPortalController.php:407
* @route '/portal/password'
*/
updatePassword.url = (options?: RouteQueryOptions) => {
    return updatePassword.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updatePassword
* @see app/Http/Controllers/Customer/CustomerPortalController.php:407
* @route '/portal/password'
*/
updatePassword.put = (options?: RouteQueryOptions): RouteDefinition<'put'> => ({
    url: updatePassword.url(options),
    method: 'put',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updatePassword
* @see app/Http/Controllers/Customer/CustomerPortalController.php:407
* @route '/portal/password'
*/
const updatePasswordForm = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: updatePassword.url({
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'PUT',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updatePassword
* @see app/Http/Controllers/Customer/CustomerPortalController.php:407
* @route '/portal/password'
*/
updatePasswordForm.put = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: updatePassword.url({
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'PUT',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

updatePassword.form = updatePasswordForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::setDefaultVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:375
* @route '/portal/vehicles/{vehicle}/set-default'
*/
export const setDefaultVehicle = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: setDefaultVehicle.url(args, options),
    method: 'post',
})

setDefaultVehicle.definition = {
    methods: ["post"],
    url: '/portal/vehicles/{vehicle}/set-default',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::setDefaultVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:375
* @route '/portal/vehicles/{vehicle}/set-default'
*/
setDefaultVehicle.url = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { vehicle: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::setDefaultVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:375
* @route '/portal/vehicles/{vehicle}/set-default'
*/
setDefaultVehicle.post = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: setDefaultVehicle.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::setDefaultVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:375
* @route '/portal/vehicles/{vehicle}/set-default'
*/
const setDefaultVehicleForm = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: setDefaultVehicle.url(args, options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::setDefaultVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:375
* @route '/portal/vehicles/{vehicle}/set-default'
*/
setDefaultVehicleForm.post = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: setDefaultVehicle.url(args, options),
    method: 'post',
})

setDefaultVehicle.form = setDefaultVehicleForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateDefaultLocation
* @see app/Http/Controllers/Customer/CustomerPortalController.php:421
* @route '/portal/default-location'
*/
export const updateDefaultLocation = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: updateDefaultLocation.url(options),
    method: 'post',
})

updateDefaultLocation.definition = {
    methods: ["post"],
    url: '/portal/default-location',
} satisfies RouteDefinition<["post"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateDefaultLocation
* @see app/Http/Controllers/Customer/CustomerPortalController.php:421
* @route '/portal/default-location'
*/
updateDefaultLocation.url = (options?: RouteQueryOptions) => {
    return updateDefaultLocation.definition.url + queryParams(options)
}

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateDefaultLocation
* @see app/Http/Controllers/Customer/CustomerPortalController.php:421
* @route '/portal/default-location'
*/
updateDefaultLocation.post = (options?: RouteQueryOptions): RouteDefinition<'post'> => ({
    url: updateDefaultLocation.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateDefaultLocation
* @see app/Http/Controllers/Customer/CustomerPortalController.php:421
* @route '/portal/default-location'
*/
const updateDefaultLocationForm = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: updateDefaultLocation.url(options),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::updateDefaultLocation
* @see app/Http/Controllers/Customer/CustomerPortalController.php:421
* @route '/portal/default-location'
*/
updateDefaultLocationForm.post = (options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: updateDefaultLocation.url(options),
    method: 'post',
})

updateDefaultLocation.form = updateDefaultLocationForm

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::destroyVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:443
* @route '/portal/vehicles/{vehicle}'
*/
export const destroyVehicle = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'delete'> => ({
    url: destroyVehicle.url(args, options),
    method: 'delete',
})

destroyVehicle.definition = {
    methods: ["delete"],
    url: '/portal/vehicles/{vehicle}',
} satisfies RouteDefinition<["delete"]>

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::destroyVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:443
* @route '/portal/vehicles/{vehicle}'
*/
destroyVehicle.url = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions) => {
    if (typeof args === 'string' || typeof args === 'number') {
        args = { vehicle: args }
    }

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

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

    args = applyUrlDefaults(args)

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

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

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::destroyVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:443
* @route '/portal/vehicles/{vehicle}'
*/
destroyVehicle.delete = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteDefinition<'delete'> => ({
    url: destroyVehicle.url(args, options),
    method: 'delete',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::destroyVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:443
* @route '/portal/vehicles/{vehicle}'
*/
const destroyVehicleForm = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: destroyVehicle.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'DELETE',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

/**
* @see \App\Http\Controllers\Customer\CustomerPortalController::destroyVehicle
* @see app/Http/Controllers/Customer/CustomerPortalController.php:443
* @route '/portal/vehicles/{vehicle}'
*/
destroyVehicleForm.delete = (args: { vehicle: number | { id: number } } | [vehicle: number | { id: number } ] | number | { id: number }, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({
    action: destroyVehicle.url(args, {
        [options?.mergeQuery ? 'mergeQuery' : 'query']: {
            _method: 'DELETE',
            ...(options?.query ?? options?.mergeQuery ?? {}),
        }
    }),
    method: 'post',
})

destroyVehicle.form = destroyVehicleForm

const CustomerPortalController = { show, availableSlots, reschedule, cancel, markOnTheWay, storeVehicle, updateProfile, updatePassword, setDefaultVehicle, updateDefaultLocation, destroyVehicle }

export default CustomerPortalController