import type { Handle } from '@atcute/lexicons';
import { writable } from 'svelte/store';
import { hashColor } from './theme';
import type { AtprotoDid } from '@atcute/lexicons/syntax';

export type Account = {
	did: AtprotoDid;
	handle: Handle | null;
};

let _accounts: Account[] = [];
export const accounts = (() => {
	const raw = localStorage.getItem('accounts');
	_accounts = raw ? JSON.parse(raw) : [];
	const store = writable<Account[]>(_accounts);
	store.subscribe((accounts) => {
		_accounts = accounts;
		localStorage.setItem('accounts', JSON.stringify(accounts));
	});
	return store;
})();

export const addAccount = (account: Account): void => {
	accounts.update((accounts) => [...accounts.filter((a) => a.did !== account.did), account]);
};

export const loggingIn = {
	set: (account: Account | null) => {
		if (!account) {
			localStorage.removeItem('loggingIn');
		} else {
			localStorage.setItem('loggingIn', JSON.stringify(account));
		}
	},
	get: (): Account | null => {
		const raw = localStorage.getItem('loggingIn');
		return raw ? JSON.parse(raw) : null;
	}
};

export const generateColorForDid = (did: string) => hashColor(did);
