import { IUser } from "@models/user";
import {
	GetSessionFunc,
	SecondarySignInOptions,
	SessionLastRefreshedAt,
	SessionStatus,
	SignInFunc,
	SignOutFunc,
} from "@sidebase/nuxt-auth/dist/runtime/types";
import { ComputedRef, Ref } from "vue";

declare module "#auth" {
	interface SessionData {
		token?: string;
		user?: IUser;
	}
}

declare module "@sidebase/nuxt-auth/dist/runtime/types" {
	interface SessionData {
		token?: string;
		user?: IUser;
	}
	declare const signIn: SignInFunc<Credentials, any>;
	declare const signOut: SignOutFunc;
	declare const getSession: GetSessionFunc<SessionData | null | void>;
	declare const signUp: (
		credentials: Credentials,
		signInOptions?: SecondarySignInOptions,
	) => Promise<any>;

	type WrappedSessionData<SessionData> = Ref<SessionData | null | undefined>;
	export interface CommonUseAuthReturn<
		SignIn,
		SignOut,
		GetSession,
		SessionData,
	> {
		data: Readonly<WrappedSessionData<SessionData>>;
		lastRefreshedAt: Readonly<Ref<SessionLastRefreshedAt>>;
		status: ComputedRef<SessionStatus>;
		signIn: SignIn;
		signOut: SignOut;
		getSession: GetSession;
	}
	interface UseAuthReturn
		extends CommonUseAuthReturn<
			typeof signIn,
			typeof signOut,
			typeof getSession,
			SessionData
		> {
		signUp: typeof signUp;
		token: Readonly<Ref<string | null>>;
	}

	export declare const useAuth: () => UseAuthReturn;
}

export {};