import { ApiError } from '@goofy-client/tech-shared';
import { UserProfileResource } from '@goofy-client/user-profile-shared';
import { ActionCreator, createAction, props } from '@ngrx/store';
import { TypedAction } from '@ngrx/store/src/models';
import { UserSettings, UserSettingsResource } from '../user-settings.model';

//TODO centralize ActionCreate
export interface UserSettingsActionCreator<T> extends ActionCreator<string, (props: T) => T & TypedAction<string>> { }
export interface TypedActionCreator extends ActionCreator<string, () => TypedAction<string>> { }

export interface UserProfileAction {
	currentUser: UserProfileResource
}

export interface LoadedUserSettingsAction {
	userSettings: UserSettingsResource
}

export interface SetUserSettingsAction {
	userSettings: UserSettings
}

export interface ApiErrorAction {
	apiError: ApiError
}

export const loadUserSettings: UserSettingsActionCreator<UserProfileAction> = createAction(
	'[UserSettings] Load UserSettings',
	props<{ currentUser: UserProfileResource }>()
);

export const loadUserSettingsSuccess: UserSettingsActionCreator<LoadedUserSettingsAction> = createAction(
	'[UserSettings/API] Load UserSettings Success',
	props<{ userSettings: UserSettingsResource }>()
);

export const loadUserSettingsFailure: UserSettingsActionCreator<ApiErrorAction> = createAction(
	'[UserSettings/API] Load UserSettings Failure',
	props<ApiErrorAction>()
);

export const setUserSettings: UserSettingsActionCreator<SetUserSettingsAction> = createAction(
	'[UserSettings] Set UserSettings',
	props<{ userSettings: UserSettings }>()
);

export const setUserSettingsSuccess: UserSettingsActionCreator<LoadedUserSettingsAction> = createAction(
	'[UserSettings/API] Set UserSettings Success',
	props<{ userSettings: UserSettingsResource }>()
);

export const setUserSettingsFailure: UserSettingsActionCreator<ApiErrorAction> = createAction(
	'[UserSettings/API] Set UserSettings Failure',
	props<ApiErrorAction>()
);