/**
 * Enumeration for different status types.
 */
declare enum EXingOrderStatus {
    /**
     * Represents an active state.
     */
    ACTIVE = "active",
    /**
     * Represents a state that has not been started.
     */
    UNSTARTED = "unstarted",
    /**
     * Represents an expired state.
     */
    EXPIRED = "expired"
}

/**
 * Represents a paginated response structure for XING E-Recruiting API.
 *
 * @template T - The type of the items in the collection.
 */
interface XingERecruitingPaginatedResponse<T> {
    /**
     * The total number of items in the response.
     *
     * @example 150
     */
    total: number;
    /**
     * The current page number of the paginated response.
     *
     * @example 1
     */
    current_page: number;
    /**
     * The total number of pages available.
     *
     * @example 10
     */
    total_pages: number;
    /**
     * Collection of items containing detailed information.
     */
    collection: Array<T>;
}

/**
 * Represents the request structure for fetching Xing orders.
 */
interface XingGetOrdersParameters {
    /**
     * A list of order IDs to filter the results for.
     * If not provided, all orders will be returned.
     *
     * @example [1, 2, 3]
     */
    ids?: Array<number>;
    /**
     * The current page index for pagination.
     * Defaults to 1 if not specified.
     * Page index must be a positive integer.
     *
     * @example 1
     */
    page?: number;
    /**
     * Filters orders by their current status.
     * Available options: EXingOrderStatus.ACTIVE, EXingOrderStatus.UNSTARTED, EXingOrderStatus.EXPIRED.
     *
     * @example EXingOrderStatus.ACTIVE
     */
    status?: EXingOrderStatus;
}

/**
 * Represents an order in Xing.
 */
interface XingOrder {
    /**
     * Unique identifier for the order.
     *
     * @example 12345
     */
    order_id: number;
    /**
     * Identifier of the organization associated with the order.
     *
     * @example 67890
     */
    organization_id: number;
    /**
     * Type of the order.
     * @example "Campus"
     */
    kind: string;
    /**
     * Total number of postings allowed for this order.
     * @example 100
     */
    posting_amount_total: number;
    /**
     * Number of postings that have already been used.
     *
     * @example 25
     */
    posting_amount_used: number;
    /**
     * The duration of the posting in days.
     *
     * @example 30
     */
    posting_duration: number;
    /**
     * Start date of the order in YYYY-MM-DD format.
     *
     * @example "2023-01-01"
     */
    start_date: string;
    /**
     * End date of the order in YYYY-MM-DD format.
     *
     * @example "2023-12-31"
     */
    end_date: string;
    /**
     * Current status of the order (e.g., active).
     *
     * @example EXingOrderStatus.EXPIRED
     * @example "active"
     */
    status: EXingOrderStatus;
}

/**
 * Enum representing the states of a job.
 */
declare enum EXingJobState {
    /** The job has been created but is not yet active. */
    CREATED = "created",
    /** The job is currently active and operational. */
    ACTIVE = "active",
    /** The job has been deactivated and is temporarily inactive. */
    DEACTIVATED = "deactivated",
    /** The job has been archived for historical records. */
    ARCHIVED = "archived",
    /** The job has been permanently deleted. */
    DELETED = "deleted"
}

/**
 * Enum representing supported currencies.
 *
 * @enum {string}
 * @property {string} EUR - Euro currency.
 * @property {string} USD - US Dollar currency.
 * @property {string} GBP - British Pound currency.
 * @property {string} CHF - Swiss Franc currency.
 *
 * @example
 * Currency.EUR // "EUR"
 * Currency.USD // "USD"
 * Currency.GBP // "GBP"
 * Currency.CHF // "CHF"
 */
declare enum EXingCurrency {
    /** Euro currency. */
    EUR = "EUR",
    /** US Dollar currency. */
    USD = "USD",
    /** British Pound currency. */
    GBP = "GBP",
    /** Swiss Franc currency. */
    CHF = "CHF"
}

/**
 * Enum representing job type classifications.
 *
 * @enum {string}
 * @property {string} FULL_TIME - Full-time job.
 * @property {string} PART_TIME - Part-time job.
 * @property {string} INTERNSHIP - Internship position.
 * @property {string} FREELANCE - Freelance work.
 * @property {string} TEMPORARY - Temporary employment.
 * @property {string} TRAINING - Training or apprenticeship position.
 *
 * @example
 * EXingJobType.FULL_TIME   // "FULL_TIME"
 * EXingJobType.INTERNSHIP  // "INTERNSHIP"
 * EXingJobType.TRAINING    // "TRAINING"
 */
declare enum EXingJobType {
    /** Full-time job. */
    FULL_TIME = "FULL_TIME",
    /** Part-time job. */
    PART_TIME = "PART_TIME",
    /** Internship position. */
    INTERNSHIP = "INTERNSHIP",
    /** Freelance work. */
    FREELANCE = "FREELANCE",
    /** Temporary employment. */
    TEMPORARY = "TEMPORARY",
    /** Training or apprenticeship position. */
    TRAINING = "TRAINING"
}

/**
 * Career level classification
 */
declare enum EXingJobLevel {
    /** Represents students or interns */
    STUDENT = "JOBLEVEL_1",
    /** Represents entry-level positions */
    ENTRY = "JOBLEVEL_2",
    /** Represents experienced professionals */
    PROFESSIONAL = "JOBLEVEL_3",
    /** Represents managerial roles (Manager/Supervisor) */
    MANAGER = "JOBLEVEL_4",
    /** Represents executive roles (VP, SVP, etc.) */
    EXECUTIVE = "JOBLEVEL_5",
    /** Represents senior executive roles (CEO, CFO, President) */
    SENIOR_EXECUTIVE = "JOBLEVEL_6"
}

/**
 * Enum representing the point of contact type for a job posting.
 *
 * @enum {string}
 * @property {string} COMPANY - The company is the point of contact.
 * @property {string} USER - A specific user is the point of contact.
 * @property {string} NONE - No specific point of contact is set.
 *
 * @example
 * EXingJobPointOfContactType.COMPANY // "company"
 * EXingJobPointOfContactType.USER    // "user"
 * EXingJobPointOfContactType.NONE    // "none"
 */
declare enum EXingJobPointOfContactType {
    /** The company is the point of contact. */
    COMPANY = "company",
    /** A specific user is the point of contact. */
    USER = "user",
    /** No specific point of contact is set. */
    NONE = "none"
}

/**
 * Application method options
 */
declare enum EXingReplySetting {
    /** Applications via XING messaging */
    XING_MESSAGING = "xing_messaging",
    /** Applications via email */
    EMAIL = "email",
    /** Applications via external URL */
    URL = "url",
    /** XING Apply platform */
    XING_APPLY = "xing_apply"
}

/**
 * Enum representing the different user roles associated with a job posting.
 *
 * @enum {string}
 * @property {string} HR_CONSULTANT - The user is an HR consultant.
 * @property {string} HR_DEPARTMENT - The user is part of the HR department.
 * @property {string} MANAGER - The user is a hiring manager.
 * @property {string} EXTERNAL_RECRUITER - The user is an external recruiter.
 * @property {string} EMPLOYEE - The user is an employee.
 *
 * @example
 * EXingJobUserRole.HR_CONSULTANT // "HR_CONSULTANT"
 * EXingJobUserRole.HR_DEPARTMENT // "HR_DEPARTMENT"
 * EXingJobUserRole.MANAGER // "MANAGER"
 */
declare enum EXingJobUserRole {
    /** The user is an HR consultant. */
    HR_CONSULTANT = "HR_CONSULTANT",
    /** The user is part of the HR department. */
    HR_DEPARTMENT = "HR_DEPARTMENT",
    /** The user is a hiring manager. */
    MANAGER = "MANAGER",
    /** The user is an external recruiter. */
    EXTERNAL_RECRUITER = "EXTERNAL_RECRUITER",
    /** The user is an employee. */
    EMPLOYEE = "EMPLOYEE"
}

/**
 * Represents the request structure for fetching Xing job postings.
 */
interface XingGetPostingsParameters {
    /**
     * A list of order IDs to filter the results for.
     * If not provided, all job postings will be returned.
     *
     * Example: [1, 2, 3]
     */
    ids?: Array<number>;
    /**
     * The current page index for pagination.
     * Defaults to 1 if not specified.
     * Must be a positive integer.
     *
     * Example: 1
     */
    page?: number;
}

/**
 * Interface representing the content of a job description section.
 *
 * @property {string} [title] - The title of the job description section.
 *                              * Optional
 *                              * Maximum 255 characters
 *                              * HTML is not allowed
 *
 * @property {string} content - The main content of the job description section.
 *                               * Required
 *                               * Maximum 5,000 characters
 *                               * HTML is allowed
 *
 * @example
 * const jobDescription: XingJobDescriptionSectionContent = {
 *   title: "Requirements",
 *   content: "Candidates must have a minimum of 5 years experience."
 * };
 */
interface XingJobDescriptionSectionContent {
    /** Optional title of the section (max 255 characters, no HTML). */
    title?: string;
    /** Main content of the section (max 5,000 characters, HTML allowed). */
    content: string;
}

/**
 * Interface representing the structure of a detailed job description template.
 *
 * @property {string} [title_color] - Hexadecimal color code for the title. (Optional)
 * @property {string} [header_image] - URL of the header image. (Optional)
 * @property {string} [footer_image] - URL of the footer image. (Optional)
 *
 * @property {XingJobDescriptionSectionContent} [company_description] - Section describing the company. (Optional)
 * @property {XingJobDescriptionSectionContent} [responsibility] - Section outlining responsibilities. (Optional)
 * @property {XingJobDescriptionSectionContent} [skills] - Section listing skills required. (Optional)
 * @property {XingJobDescriptionSectionContent} [we_offer] - Section describing the offerings of the company. (Optional)
 * @property {XingJobDescriptionSectionContent} [contact_info] - Section containing contact information. (Optional)
 * @property {string} [generic_description] - Generic description with a maximum of 29,000 characters. (Optional)
 *
 * @property {string} [video_youtube] - YouTube video URL for integration. (Optional)
 * @property {string} [video_vimeo] - Vimeo video URL for integration. (Optional)
 *
 * @property {string} [social_website] - Company website URL. (Optional)
 * @property {string} [social_facebook] - Facebook profile URL. (Optional)
 * @property {string} [social_twitter] - Twitter profile URL. (Optional)
 * @property {string} [social_youtube] - YouTube profile URL. (Optional)
 * @property {string} [social_xing] - Xing profile URL. (Optional)
 * @property {string} [social_instagram] - Instagram profile URL. (Optional)
 * @property {string} [social_pinterest] - Pinterest profile URL. (Optional)
 * @property {string} [social_tiktok] - TikTok profile URL. (Optional)
 * @property {string} [social_kununu] - Kununu profile URL. (Optional)
 *
 * @example
 * const jobTemplate: XingJobDescriptionTemplate = {
 *   title_color: "#FF5733",
 *   header_image: "https://example.com/header.jpg",
 *   company_description: {
 *     title: "About Us",
 *     content: "We are a leading company in the tech industry."
 *   },
 *   video_youtube: "https://youtube.com/exampleVideo",
 *   social_website: "https://companywebsite.com"
 * };
 */
interface XingJobDescriptionTemplate {
    /** Hexadecimal color code for the title (e.g., "#FF5733"). */
    title_color?: string;
    /** URL of the header image. */
    header_image?: string;
    /** URL of the footer image. */
    footer_image?: string;
    /** Section describing the company. */
    company_description?: XingJobDescriptionSectionContent;
    /** Section outlining the responsibilities. */
    responsibility?: XingJobDescriptionSectionContent;
    /** Section listing the required skills. */
    skills?: XingJobDescriptionSectionContent;
    /** Section describing what the company offers. */
    we_offer?: XingJobDescriptionSectionContent;
    /** Section containing contact information. */
    contact_info?: XingJobDescriptionSectionContent;
    /** Generic description with a limit of 29,000 characters. */
    generic_description?: string;
    /** YouTube video URL for embedding. */
    video_youtube?: string;
    /** Vimeo video URL for embedding. */
    video_vimeo?: string;
    /** URL to the company website. */
    social_website?: string;
    /** URL to the company's Facebook profile. */
    social_facebook?: string;
    /** URL to the company's Twitter profile. */
    social_twitter?: string;
    /** URL to the company's YouTube profile. */
    social_youtube?: string;
    /** URL to the company's Xing profile. */
    social_xing?: string;
    /** URL to the company's Instagram profile. */
    social_instagram?: string;
    /** URL to the company's Pinterest profile. */
    social_pinterest?: string;
    /** URL to the company's TikTok profile. */
    social_tiktok?: string;
    /** URL to the company's Kununu profile. */
    social_kununu?: string;
}

/**
 * Enum representing the remote work options available for a job posting.
 *
 * @enum {string}
 * @property {string} FULLY_REMOTE - The job offers a fully remote option.
 * @property {string} PARTIALLY_REMOTE - The job offers a mix of remote and on-site work.
 * @property {string} NON_REMOTE - The job requires full-time on-site work.
 *
 * @example
 * EXingRemoteOption.FULLY_REMOTE // "FULLY_REMOTE"
 * EXingRemoteOption.HYBRID // "PARTIALLY_REMOTE"
 * EXingRemoteOption.ON_SITE // "NON_REMOTE"
 */
declare enum EXingRemoteOption {
    /** The job offers a fully remote option. */
    FULLY_REMOTE = "FULLY_REMOTE",
    /** The job offers a mix of remote and on-site work. */
    PARTIALLY_REMOTE = "PARTIALLY_REMOTE",
    /** The job requires full-time on-site work. */
    NON_REMOTE = "NON_REMOTE"
}

/**
 * Enum representing the intervals for specifying salary in a job posting.
 *
 * @enum {string}
 * @property {string} HOUR - Salary is specified per hour.
 * @property {string} DAY - Salary is specified per day.
 * @property {string} WEEK - Salary is specified per week.
 * @property {string} MONTH - Salary is specified per month.
 * @property {string} YEAR - Salary is specified per year.
 *
 * @example
 * SalaryInterval.HOUR  // "HOUR"
 * SalaryInterval.DAY   // "DAY"
 * SalaryInterval.WEEK  // "WEEK"
 * SalaryInterval.MONTH // "MONTH"
 * SalaryInterval.YEAR  // "YEAR"
 */
declare enum EXingJobSalaryInterval {
    /** Salary is specified per hour. */
    HOUR = "HOUR",
    /** Salary is specified per day. */
    DAY = "DAY",
    /** Salary is specified per week. */
    WEEK = "WEEK",
    /** Salary is specified per month. */
    MONTH = "MONTH",
    /** Salary is specified per year. */
    YEAR = "YEAR"
}

/**
 * Enum representing the classification of students.
 *
 * @enum {string}
 * @property {string} BACHELOR - Bachelor's degree student.
 * @property {string} MASTER - Master's degree student.
 * @property {string} PHD - Doctoral (PhD) degree student.
 * @property {string} STUDENT - General student classification.
 *
 * @example
 * StudentClassification.BACHELOR // "bachelor"
 * StudentClassification.PHD      // "phd"
 */
declare enum EXingStudentClassification {
    /** Bachelor's degree student. */
    BACHELOR = "bachelor",
    /** Master's degree student. */
    MASTER = "master",
    /** Doctoral (PhD) degree student. */
    PHD = "phd",
    /** General student classification. */
    STUDENT = "student"
}

/**
 * Enum representing various job disciplines in the Xing platform.
 * Each discipline is associated with a unique numeric code.
 */
declare enum EXingJobDiscipline {
    /** Analysis and Statistics */
    ANALYSIS_AND_STATISTICS = 1001,
    /** Administration */
    ADMINISTRATION = 1002,
    /** Consulting */
    CONSULTING = 1003,
    /** Customer Service */
    CUSTOMER_SERVICE = 1004,
    /** Purchasing, Materials Management, and Logistics */
    PURCHASING_MATERIALS_MANAGEMENT_AND_LOGISTICS = 1005,
    /** Finance, Accounting, and Controlling */
    FINANCE_ACCOUNTING_AND_CONTROLLING = 1006,
    /** Teaching, Research and Development */
    TEACHING_R_AND_D = 1007,
    /** Health, Medical, and Social */
    HEALTH_MEDICAL_AND_SOCIAL = 1008,
    /** Graphic Design and Architecture */
    GRAPHIC_DESIGN_AND_ARCHITECTURE = 1009,
    /** Engineering and Technical */
    ENGINEERING_AND_TECHNICAL = 1010,
    /** IT and Software Development */
    IT_AND_SOFTWARE_DEVELOPMENT = 1011,
    /** Management and Corporate Development */
    MANAGEMENT_AND_CORPORATE_DEVELOPMENT = 1012,
    /** Marketing and Advertising */
    MARKETING_AND_ADVERTISING = 1013,
    /** Human Resources (HR) */
    HR = 1014,
    /** Public Relations and Journalism */
    PR_AND_JOURNALISM = 1015,
    /** Production and Manufacturing */
    PRODUCTION_AND_MANUFACTURING = 1016,
    /** Product Management */
    PRODUCT_MANAGEMENT = 1017,
    /** Project Management */
    PROJECT_MANAGEMENT = 1018,
    /** Process Planning and Quality Assurance (QA) */
    PROCESS_PLANNING_AND_QA = 1019,
    /** Law */
    LAW = 1020,
    /** Sales and Commerce */
    SALES_AND_COMMERCE = 1021,
    /** Other Disciplines */
    OTHER_DISCIPLINES = 1022
}

declare enum EXingIndustry {
    ARCHITECTURE_AND_PLANNING = 10000,
    CIVIL_ENGINEERING = 10100,
    CONSTRUCTION = 10200,
    BUILDING_MATERIALS = 10300,
    ARCHITECTURE = 10400,
    GARDENING_AND_LANDSCAPING = 10500,
    CONSUMER_GOODS_AND_TRADE = 20000,
    FOOD = 20100,
    BEVERAGE = 20200,
    TOBACCO_PRODUCTS = 20300,
    FASHION_AND_TEXTILES = 20400,
    LUXURY_GOODS_AND_JEWELLERY = 20500,
    FURNITURE_AND_WOOD_PRODUCTS = 20600,
    STATIONERY = 20700,
    COSMETICS_AND_TOILETRIES = 20800,
    GLASS_AND_CERAMICS = 20900,
    IMPORT_AND_EXPORT = 21000,
    WHOLESALE = 21100,
    RETAIL = 21200,
    AUTOMOTIVE_AND_VEHICLE_MANUFACTURING = 30000,
    AUTOMOTIVE_MOTORCYCLES_AND_BICYCLES = 30100,
    SHIPBUILDING = 30200,
    RAILWAY_LOCOS_AND_ROLLING_STOCK = 30300,
    TRAFFIC_ENGINEERING = 30400,
    AEROSPACE = 30500,
    VEHICLE_RENTAL = 30600,
    INDUSTRY_AND_MECHANICAL_ENGINEERING = 40000,
    INSTRUMENTATION_AND_CONTROL_ENGINEERING = 40100,
    SEMICONDUCTORS_AND_ELECTRONIC_COMPONENTS = 40200,
    PRINTING = 40300,
    COMPOSITES = 40400,
    CHEMICALS = 40500,
    MINERAL_OIL_PROCESSING = 40600,
    METAL_AND_METALWORKING = 40700,
    BIOTECH_AND_NANOTECH = 40800,
    PLASTIC_AND_RUBBER_GOODS = 40900,
    ARMAMENTS = 41000,
    MECHANICAL_AND_INDUSTRIAL_ENGINEERING = 41100,
    ELECTRICAL_ENGINEERING = 41200,
    OPTICAL_INSTRUMENTS_AND_PHOTOGRAPHIC_EQUIPMENT = 41300,
    PHARMACEUTICAL_AND_MEDICAL_TECHNOLOGY = 50000,
    MEDICAL_TECHNOLOGY = 50100,
    PHARMACEUTICAL_AND_MEDICINAL_PRODUCTS = 50200,
    ENERGY_WATER_AND_ENVIRONMENT = 60000,
    RENEWABLE_ENERGY = 60100,
    ENERGY = 60200,
    WATER_SUPPLY_AND_SANITATION = 60300,
    WASTE_AND_RECYCLING = 60400,
    ENVIRONMENTAL_PROTECTION = 60500,
    TRANSPORT_AND_LOGISTICS = 70000,
    PUBLIC_TRANSPORT = 70100,
    RAIL = 70200,
    SHIPPING = 70300,
    AVIATION = 70400,
    STORAGE = 70500,
    POST_AND_FORWARDING = 70600,
    TOURISM_AND_FOOD_SERVICE = 80000,
    HOTEL = 80100,
    RESTAURANT_AND_FOOD_SERVICE = 80200,
    TRAVEL_AGENCIES = 80300,
    LEISURE_FACILITIES = 80400,
    INTERNET_AND_IT = 90000,
    SOFTWARE = 90100,
    IT_SERVICE_PROVIDER = 90200,
    IT_SECURITY = 90300,
    COMPUTER_NETWORKING = 90400,
    COMPUTER_HARDWARE = 90500,
    CONSUMER_ELECTRONICS = 90600,
    INTERNET_AND_ONLINE_MEDIA = 90700,
    COMPUTER_GAMES = 90800,
    TELECOMMUNICATIONS = 100000,
    MEDIA_AND_PUBLISHING = 110000,
    INFORMATION_SERVICES = 110100,
    BROADCAST_MEDIA = 110200,
    PUBLISHING = 110300,
    FILM_AND_MUSIC = 110400,
    JOURNALISM = 110500,
    TRANSLATION_AND_INTERPRETING = 110600,
    COPYWRITING_AND_PROOFREADING = 110700,
    BANKING_AND_FINANCIAL_SERVICES = 120000,
    FINANCIAL_SERVICES = 120100,
    BANKING = 120200,
    INVESTMENT_BANKING = 120300,
    VENTURE_CAPITAL_AND_PRIVATE_EQUITY = 120400,
    INSURANCE = 130000,
    REAL_ESTATE = 140000,
    FACILITY_MANAGEMENT = 140100,
    REAL_ESTATE_MANAGEMENT = 140200,
    AUDITING_TAX_AND_LAW = 150000,
    LEGAL_SERVICES = 150100,
    AUDITING = 150200,
    TAX_CONSULTING = 150300,
    CONSULTING = 160000,
    MARKETING_PR_AND_DESIGN = 170000,
    MARKETING_AND_ADVERTISING = 170100,
    MARKET_RESEARCH_AND_OPINION_POLLING = 170200,
    GRAPHIC_DESIGN = 170300,
    TRADE_FAIRS_EXHIBITIONS_AND_CONVENTIONS = 170400,
    PR = 170500,
    HR_SERVICES = 180000,
    HR_SERVICES_AND_CONSULTING = 180100,
    OUTSOURCING_AND_OFFSHORING = 180200,
    CIVIL_SERVICE_ASSOCIATIONS_AND_INSTITUTIONS = 190000,
    NON_PROFIT_ORGANISATIONS_AND_CHARITIES = 190100,
    RELIGIOUS_INSTITUTIONS = 190200,
    PUBLIC_ADMINISTRATION = 190300,
    POLITICS_UNIONS_AND_ASSOCIATIONS = 190400,
    DEFENCE_JUDICIARY_AND_POLICE = 190500,
    INTERNATIONAL_AFFAIRS = 190600,
    EDUCATION_AND_SCIENCE = 200000,
    RESEARCH = 200100,
    SCHOOLS_AND_CHILDCARE = 200200,
    ACADEMIA = 200300,
    CHILDCARE = 200400,
    COACHING_AND_TRAINING = 200500,
    E_LEARNING = 200600,
    HEALTH_AND_SOCIAL = 210000,
    HOSPITALS = 210100,
    VETERINARY = 210200,
    MEDICAL_PRACTICES = 210300,
    ALTERNATIVE_MEDICINE = 210400,
    PSYCHOLOGY_AND_PSYCHOTHERAPY = 210500,
    MEDICAL_SERVICES = 210600,
    NURSING_SECTOR = 210700,
    WELFARE = 210800,
    ART_CULTURE_AND_SPORT = 220000,
    PERFORMING_ARTS = 220100,
    PHOTOGRAPHY = 220200,
    MUSIC = 220300,
    ARTS_AND_CRAFTS = 220400,
    MUSEUMS_AND_CULTURAL_ESTABLISHMENTS = 220500,
    LIBRARIES = 220600,
    SPORTS_CLUBS_CENTRES_AND_GYMS = 220700,
    ATHLETES_ORGANISERS_AND_ASSOCIATIONS = 220800,
    OTHER_INDUSTRIES = 230000,
    GAMBLING_AND_BETTING = 230100,
    AGRICULTURE = 230200,
    FORESTRY_AND_HUNTING = 230300,
    FISHERY = 230400,
    OTHER_SERVICES = 230500,
    MINING_AND_METALS = 230600,
    GEOLOGY = 230700,
    SECURITY_AND_INVESTIGATION = 230800
}

/**
 * Interface for creating a job posting on XING's platform.
 * Represents the required and optional fields needed for submitting a job post.
 */
interface XingCreatePostingRequest {
    /**
     * Organization ID provided by XING sales.
     * @example 5160
     */
    organization_id: number;
    /**
     * Order ID for billing purposes.
     * @example 1022232
     */
    order_id: number;
    /**
     * Job title with a maximum of 255 characters.
     * @example "Technical Product Manager - Jobs Integration (m/w)"
     */
    function: string;
    /**
     * Name of the company posting the job (max 255 characters).
     * @example "New Work SE"
     */
    company_name: string;
    /**
     * HTML-formatted job description (max 10,000 characters).
     * @example "<p>Job description with allowed HTML tags</p>"
     */
    description?: string;
    /**
     * Alternative: A structured description template for the job post.
     */
    description_template?: XingJobDescriptionTemplate;
    /**
     * City where the job is located.
     * @example "Hamburg"
     */
    city: string;
    /**
     * 2-letter ISO country code for the job's location.
     * @example "DE" // Germany
     */
    country: string;
    /**
     * Application method to be used (reply settings).
     */
    reply_setting: EXingReplySetting;
    /**
     * ZIP code of the job location.
     */
    zipcode?: string;
    /**
     * Street name of the job location.
     */
    street?: string;
    /**
     * Region of the job location (e.g., state or province).
     */
    region?: string;
    /**
     * ISO 639-1 language code for the job post.
     * @example "en", "de"
     */
    language?: string;
    /**
     * Tags for the job posting (max 500 characters).
     */
    tags?: string;
    /**
     * Required skills for the job (max 255 characters).
     */
    skills?: string;
    /**
     * Job level classification.
     * @example "JOBLEVEL_3"
     */
    level?: EXingJobLevel;
    /**
     * Type of job.
     * @example "FULL_TIME"
     */
    job_type?: EXingJobType;
    /**
     * Discipline ID representing the specific field/sector of the job.
     * @example "1017" // Product Management
     */
    discipline_id?: EXingJobDiscipline;
    /**
     * Industry ID representing the job's industry.
     * @example "90000" // Internet and IT
     */
    industry_id?: EXingIndustry;
    /**
     * Remote work options (multiple allowed).
     */
    remote_options?: EXingRemoteOption[];
    /**
     * Point of contact type for the job posting.
     */
    point_of_contact_type?: EXingJobPointOfContactType;
    /**
     * User role associated with the job posting.
     */
    user_role?: EXingJobUserRole;
    /**
     * Email address for receiving applications. Required if `reply_setting` is `email`.
     */
    reply_email?: string;
    /**
     * URL for receiving applications. Required if `reply_setting` is `url`.
     */
    reply_url?: string;
    /**
     * Link to the poster's XING profile.
     */
    poster_url?: string;
    /**
     * URL of the company profile.
     */
    company_profile_url?: string;
    /**
     * Boolean flag to publish the job post to the company's XING profile.
     */
    publish_to_company?: boolean;
    /**
     * Full HTML URL for the job advertisement.
     */
    posting_url?: string;
    /**
     * Base64-encoded logo image content for the job post.
     */
    posting_logo_content?: string;
    /**
     * Internal tracking code (max 100 characters).
     */
    job_code?: string;
    /**
     * Fixed salary amount for the job.
     */
    salary?: number;
    /**
     * Minimum salary range.
     */
    salary_range_start?: number;
    /**
     * Maximum salary range.
     */
    salary_range_end?: number;
    /**
     * Interval for the salary (e.g., monthly, yearly).
     */
    salary_interval?: EXingJobSalaryInterval;
    /**
     * Currency for the salary amounts.
     */
    currency?: EXingCurrency;
    /**
     * Classification relevant for campus or student jobs.
     */
    student_classification?: EXingStudentClassification;
    /**
     * Video link for embedding (YouTube/Vimeo URL).
     */
    video_link?: string;
    /**
     * URL to the privacy policy for applicants.
     */
    xing_apply_privacy_policy?: string;
    /**
     * URL to the terms and conditions for applicants.
     */
    xing_apply_terms_and_conditions?: string;
}

/**
 * API Response Structure
 */
interface XingCreatePostingResponse {
    /** Created job ID */
    posting_id: number;
    /** Public job URL */
    permalink: string;
}

/**
 * Abstract class that provides a base for working with the Xing API.
 *
 * This class handles API authentication and provides utility methods for sending authorized HTTP requests
 * to API endpoints.
 */
declare abstract class XingBaseApiClient {
    /**
     * Access token.
     */
    private readonly accessToken;
    /**
     * Constructor for initializing an instance with the given access token.
     *
     * @param {string} accessToken - The access token used for authentication or API requests.
     */
    constructor(accessToken: string);
    /**
     * Sends an authorized HTTP request to the specified API endpoint with the given parameters,
     * method, and optional request body. It handles authorization headers and request formatting.
     *
     * @param {string} path - The path for the API endpoint.
     * @param {Record<string, string>} [params={}] - The query parameters to include in the request URL.
     * @param {'GET' | 'POST' | 'PUT' | 'DELETE'} [method='GET'] - The HTTP method to use for the request.
     * @param {unknown} [body] - The payload to include in the request body (used for POST or PUT methods).
     *
     * @return {Promise<T>} - A promise that resolves to the parsed response body as the generic type T,
     *                        or a boolean for PUT or DELETE methods with no content.
     */
    protected sendAuthorizedRequest<T>(path: string, params?: Record<string, string>, method?: 'GET' | 'POST' | 'PUT' | 'DELETE', body?: unknown): Promise<T>;
}

/**
 * Interface for individual job postings in the `getListOfPostings` response.
 */
interface XingPosting {
    /** Unique identifier for the job posting. */
    id: number;
    /** Type of job posting. */
    type: string;
    /** Job title or function. */
    function: string;
    /** Current state of the posting (e.g., "created"). */
    state: EXingJobState;
    /** Name of the company posting the job. */
    company_name: string;
    /** URL linking to the company profile, if available. */
    company_profile_url?: string;
    /** Flag indicating if the job should be published to the company's profile. */
    publish_to_company?: boolean;
    /** Job salary currency. */
    currency?: EXingCurrency;
    /** HTML-formatted description of the job. */
    description?: string;
    /** Discipline or field of the job as text. */
    discipline_id_as_text?: string;
    /** Unique identifier for the discipline of the job. */
    discipline_id?: string;
    /** Industry type as text. */
    industry_id_as_text?: string;
    /** Unique identifier for the job's industry. */
    industry_id?: string;
    /** Custom job code (if provided). */
    job_code?: string;
    /** Type of job (e.g., FULL_TIME, PART_TIME). */
    job_type?: EXingJobType;
    /** ISO 639-1 language code for the job posting. */
    language?: string;
    /** Job classification or level. */
    level?: EXingJobLevel;
    /** Order ID associated with this job posting. */
    order_id: number;
    /** Organization ID of the company posting the job. */
    organization_id: number;
    /** Type of contact point for the job posting. */
    point_of_contact_type?: EXingJobPointOfContactType;
    /** URL to the job poster's profile, if available. */
    poster_url?: string | null;
    /** URL to the published job posting, if available. */
    posting_url?: string | null;
    /** Indicator if the job is public or private. */
    public: boolean;
    /** Reply email for applications, if applicable. */
    reply_email?: string | null;
    /** Method of application submission (e.g., email, URL). */
    reply_setting: EXingReplySetting;
    /** URL for submitting applications, if applicable. */
    reply_url?: string | null;
    /** Proposed salary information, if available. */
    salary?: string | null;
    /** Starting salary range, if applicable. */
    salary_range_start?: number | null;
    /** End salary range, if applicable. */
    salary_range_end?: number | null;
    /** Interval of salary payment (e.g., monthly, yearly), if applicable. */
    salary_interval?: string | null;
    /** Skills required for the job posting. */
    skills?: string | null;
    /** Classification of the job for student eligibility, if applicable. */
    student_classification_as_text?: string | null;
    /** Numeric classification of student eligibility, if applicable. */
    student_classification?: string | null;
    /** Tags associated with the job posting (e.g., keywords). */
    tags?: string;
    /** Indicator if additional information is available. */
    tell_me_more?: boolean;
    /** User role associated with posting this job (e.g., EMPLOYEE). */
    user_role?: EXingJobUserRole;
    /** Street address of the job's location. */
    street?: string | null;
    /** City of the job location. */
    city: string;
    /** Region or state of the job location. */
    region?: string | null;
    /** Country code of the job location (ISO 3166-1 alpha-2). */
    country: string;
    /** ZIP or postal code of the job location. */
    zipcode?: string | null;
}

/**
 * Client for XING E-Recruiting API.
 *
 * The XING E-Recruiting API allows to post job postings on XING Jobs
 * as well as monitoring their status and performance.
 */
declare class XingERecruitingApiClient extends XingBaseApiClient {
    private getPostingId;
    /**
     * Get a paginated list of all orders for which the current oAuth user created postings.
     *
     * @param {XingGetOrdersParameters} [parameters]
     */
    getOrders({ ids, status, page, }?: XingGetOrdersParameters): Promise<XingERecruitingPaginatedResponse<XingOrder>>;
    /**
     * Get a paginated list of all postings created by the current oAuth user.
     *
     * @param {XingGetPostingsParameters} [parameters]
     */
    getPostings({ page, ids, }?: XingGetPostingsParameters): Promise<XingERecruitingPaginatedResponse<XingPosting>>;
    /**
     * Creates a job posting on the Xing platform.
     *
     * @param {XingCreatePostingRequest} jobPosting Object containing the details of the job posting to be created.
     * @return {Promise<XingCreatePostingResponse>} Response object for the created job posting.
     */
    createJobPosting(jobPosting: XingCreatePostingRequest): Promise<XingCreatePostingResponse>;
    /**
     * Updates an existing job posting on the Xing platform.
     *
     * @param {number} jobPostingId The job posting id.
     * @param{Partial<XingCreatePostingRequest>} jobPosting Payload containing the new data.
     * @returns A promise resolving to void if the update is successful.
     */
    updateJobPosting(jobPostingId: number, jobPosting: Partial<XingCreatePostingRequest>): Promise<void>;
    /**
     * Activates a job posting on the Xing platform.
     *
     * @param {number} jobPostingId Job posting id to activate.
     */
    activatePosting(jobPostingId: number): Promise<void>;
    /**
     * Activates a job posting on the Xing platform.
     *
     * @param {XingPosting} jobPosting Job posting id to activate.
     */
    activatePosting(jobPosting: XingPosting): Promise<void>;
    /**
     * Archives a job posting on the Xing platform.
     *
     * @param {number} jobPostingId Job posting id to archive.
     */
    archivePosting(jobPostingId: number): Promise<void>;
    /**
     * Archives a job posting on the Xing platform.
     *
     * @param {XingPosting} jobPosting Job posting id to archive.
     */
    archivePosting(jobPosting: XingPosting): Promise<void>;
    /**
     * Deactivates a job posting on the Xing platform.
     *
     * @param {XingPosting} jobPosting Job posting to deactivate.
     */
    deactivatePosting(jobPosting: XingPosting): Promise<void>;
    /**
     * Deactivates a job posting on the Xing platform.
     *
     * @param {number} jobPostingId Job posting id to deactivate.
     */
    deactivatePosting(jobPostingId: number): Promise<void>;
    /**
     * Deletes a job posting on the Xing platform.
     *
     * @param {number} jobPostingId Job posting id to be deleted.
     */
    deletePosting(jobPostingId: number): Promise<void>;
    /**
     * Deletes a job posting on the Xing platform.
     *
     * @param {XingPosting} jobPosting Job posting to be deleted.
     */
    deletePosting(jobPosting: XingPosting): Promise<void>;
}

export { EXingCurrency, EXingJobLevel, EXingJobPointOfContactType, EXingJobState, EXingJobType, EXingJobUserRole, EXingOrderStatus, EXingReplySetting, type XingCreatePostingRequest, type XingCreatePostingResponse, XingERecruitingApiClient, type XingERecruitingPaginatedResponse, type XingGetOrdersParameters, type XingGetPostingsParameters, type XingJobDescriptionSectionContent, type XingJobDescriptionTemplate, type XingOrder };
