import { App } from 'vue';

declare interface _CookieBase {
    expire?: expireTimes;
    path?: string;
    domain?: string;
    secure?: string;
    sameSite?: string;
}

declare interface CookieConfigOptions extends _CookieBase {
}

declare type expireTimes = string | number | Date;

declare interface IVueCookieNext {
    /**
     * Set global config
     */
    config(options: CookieConfigOptions): void;
    /**
     * Set a cookie
     */
    setCookie(keyName: keyName, value: string, options?: SetCookieOptions): this;
    /**
     * Get a cookie
     */
    getCookie(keyName: keyName): any;
    /**
     * Remove a cookie
     */
    removeCookie(keyName: keyName, options?: RemoveCookieOptions): this | boolean;
    /**
     * Exist a cookie name
     */
    isCookieAvailable(keyName: keyName): boolean;
    /**
     * Get All cookie name
     */
    keys(): string[];
    install(app: App): void;
}

declare type keyName = string;

declare interface RemoveCookieOptions {
    path?: string;
    domain?: string;
}

declare interface SetCookieOptions extends _CookieBase {
}

export declare function useCookie(): IVueCookieNext;

export declare const VueCookieNext: IVueCookieNext;

export { }

declare module '@vue/runtime-core' {
  export interface ComponentCustomProperties {
    $cookie: IVueCookieNext
  }
}
