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 {};
