/**
 * Base request, used in both image and video search requests
 */
export interface BaseRequest {
    /**
     * (required) Please login to see your API key.
     */
    key?: string;
}

/**
 * Pixabay request interface for images
 */
export interface ImageRequest extends BaseRequest {
    /**
     * A URL encoded search term. If omitted, all images are returned. This value may not exceed 100 characters.
     * Example: "yellow+flower"
     */
    q?: string;

    /**
     * Language code of the language to be searched in.
     * Accepted values: cs, da, de, en, es, fr, id, it, hu, nl, no, pl, pt, ro, sk, fi, sv, tr, vi, th, bg, ru, el,
     * ja, ko, zh
     * @default "en"
     */
    lang?: string;

    /**
     * ID, hash ID, or a comma separated list of values for retrieving specific images.
     * In a comma separated list, IDs and hash IDs cannot be used together.
     */
    id?: string;

    /**
     * Choose between retrieving high resolution images and image details. When selecting details,
     * you can access images up to a dimension of 960 x 720 px.
     * Accepted values: "image_details", "high_resolution" (requires permission)
     * @default "image_details"
     */
    response_group?: 'image_details' | 'high_resolution';

    /**
     * Filter results by image type.
     * Accepted values: "all", "photo", "illustration", "vector"
     * @default "all"
     */
    image_type?: 'all' | 'photo' | 'illustration' | 'vector';

    /**
     * Whether an image is wider than it is tall, or taller than it is wide.
     * Accepted values: "all", "horizontal", "vertical"
     * @default "all"
     */
    orientation?: 'all' | 'horizontal' | 'vertical';

    /**
     * Filter results by category.
     * Accepted values: fashion, nature, backgrounds, science, education, people, feelings, religion, health, places,
     * animals, industry, food, computer, sports, transportation, travel, buildings, business, music
     */
    category?: string;

    /**
     * Minimum image width.
     * @default 0
     */
    min_width?: number;

    /**
     * Minimum image height.
     * @default 0
     */
    min_height?: number;

    /**
     * Select images that have received an Editor's Choice award.
     * Accepted values: "true", "false"
     * @default false
     */
    editors_choice?: boolean;

    /**
     * A flag indicating that only images suitable for all ages should be returned.
     * Accepted values: "true", "false"
     * @default false
     */
    safesearch?: boolean;

    /**
     * How the results should be ordered.
     * Accepted values: "popular", "latest"
     * @default "popular"
     */
    order?: 'popular' | 'latest';

    /**
     * Returned search results are paginated. Use this parameter to select the page number.
     * @default 1
     */
    page?: number;

    /**
     * Determine the number of results per page.
     * Accepted values: 3 - 200
     * @default 20
     */
    per_page?: number;
}

export interface VideoRequest extends BaseRequest {
    /**
     * A URL encoded search term.If omitted, all videos are returned.This value may not exceed 100 characters.
     * Example: "yellow+flower"
     */
    q?: string;

    /**
     * Language code of the language to be searched in.
     * Accepted values: cs, da, de, en, es, fr, id, it, hu, nl, no, pl, pt, ro, sk, fi, sv, tr, vi, th, bg, ru, el, ja,
     * ko, zh
     * @default "en"
     */
    lang?: string;

    /**
     * ID or a comma separated list of values for retrieving specific videos.
     */
    id?: string;

    /**
     * Filter results by video type.
     * Accepted values: "all", "film", "animation"
     * @default "all"
     */
    video_type?: string;

    /**
     * Filter results by category.
     * Accepted values: fashion, nature, backgrounds, science, education, people, feelings, religion, health, places,
     * animals, industry, food, computer, sports, transportation, travel, buildings, business, music
     */
    category?: string;

    /**
     * Minimum video width.
     * @default: 0
     */
    min_width?: number;

    /**
     * Minimum video height.
     * @default 0
     */
    min_height?: number;

    /**
     * Select videos that have received an Editor's Choice award.
     * Accepted values: "true", "false"
     * @default false
     */
    editors_choice?: boolean;

    /**
     * A flag indicating that only videos suitable for all ages should be returned.
     * Accepted values: "true", "false"
     * @default false
     */
    safesearch?: boolean;

    /**
     * How the results should be ordered.
     * Accepted values: "popular", "latest"
     * @default "popular"
     */
    order?: string;

    /**
     * Returned search results are paginated.Use this parameter to select the page number.
     * @default: 1
     */
    page?: number;

    /**
     * Determine the number of results per page.
     * Accepted values: 3 - 200
     * @default 20
     */
    per_page?: number;
}
