import {
	type RemixiconComponentType,
	RiArchiveLine,
	RiArrowLeftRightLine,
	RiBankCard2Line,
	RiBankLine,
	RiCalendarEventLine,
	RiDashboardLine,
	RiEyeOffLine,
	RiFileChartLine,
	RiFundsLine,
	RiGroupLine,
	RiInboxLine,
	RiNoCreditCardLine,
	RiPriceTag3Line,
	RiSettings2Line,
	RiSparklingLine,
	RiTodoLine,
} from "@remixicon/react";

export type SidebarSubItem = {
	title: string;
	url: string;
	avatarUrl?: string | null;
	isShared?: boolean;
	key?: string;
	icon?: RemixiconComponentType;
	badge?: number;
};

export type SidebarItem = {
	title: string;
	url: string;
	icon: RemixiconComponentType;
	isActive?: boolean;
	items?: SidebarSubItem[];
};

export type SidebarSection = {
	title: string;
	items: SidebarItem[];
};

export type SidebarNavData = {
	navMain: SidebarSection[];
	navSecondary: {
		title: string;
		url: string;
		icon: RemixiconComponentType;
	}[];
};

export interface PagadorLike {
	id: string;
	name: string | null;
	avatarUrl: string | null;
	canEdit?: boolean;
}

export interface SidebarNavOptions {
	pagadores: PagadorLike[];
	preLancamentosCount?: number;
}

export function createSidebarNavData(
	options: SidebarNavOptions,
): SidebarNavData {
	const { pagadores, preLancamentosCount = 0 } = options;
	const pagadorItems = pagadores
		.map((pagador) => ({
			title: pagador.name?.trim().length
				? pagador.name.trim()
				: "Pagador sem nome",
			url: `/pagadores/${pagador.id}`,
			key: pagador.canEdit ? pagador.id : `${pagador.id}-shared`,
			isShared: !pagador.canEdit,
			avatarUrl: pagador.avatarUrl,
		}))
		.sort((a, b) =>
			a.title.localeCompare(b.title, "pt-BR", { sensitivity: "base" }),
		);

	const pagadorItemsWithHistory: SidebarSubItem[] = pagadorItems;

	return {
		navMain: [
			{
				title: "Gestão Financeira",
				items: [
					{
						title: "Dashboard",
						url: "/dashboard",
						icon: RiDashboardLine,
					},
					{
						title: "Lançamentos",
						url: "/lancamentos",
						icon: RiArrowLeftRightLine,
						items: [
							{
								title: "Pré-Lançamentos",
								url: "/pre-lancamentos",
								key: "pre-lancamentos",
								icon: RiInboxLine,
								badge:
									preLancamentosCount > 0 ? preLancamentosCount : undefined,
							},
						],
					},
					{
						title: "Calendário",
						url: "/calendario",
						icon: RiCalendarEventLine,
					},
					{
						title: "Cartões",
						url: "/cartoes",
						icon: RiBankCard2Line,
						items: [
							{
								title: "Inativos",
								url: "/cartoes/inativos",
								key: "cartoes-inativos",
								icon: RiNoCreditCardLine,
							},
						],
					},
					{
						title: "Contas",
						url: "/contas",
						icon: RiBankLine,
						items: [
							{
								title: "Inativas",
								url: "/contas/inativos",
								key: "contas-inativos",
								icon: RiEyeOffLine,
							},
						],
					},
					{
						title: "Orçamentos",
						url: "/orcamentos",
						icon: RiFundsLine,
					},
				],
			},
			{
				title: "Organização",
				items: [
					{
						title: "Pagadores",
						url: "/pagadores",
						icon: RiGroupLine,
						items: pagadorItemsWithHistory,
					},
					{
						title: "Categorias",
						url: "/categorias",
						icon: RiPriceTag3Line,
					},
					{
						title: "Anotações",
						url: "/anotacoes",
						icon: RiTodoLine,
						items: [
							{
								title: "Arquivadas",
								url: "/anotacoes/arquivadas",
								key: "anotacoes-arquivadas",
								icon: RiArchiveLine,
							},
						],
					},
				],
			},
			{
				title: "Análise",
				items: [
					{
						title: "Insights",
						url: "/insights",
						icon: RiSparklingLine,
					},
					{
						title: "Tendências",
						url: "/relatorios/tendencias",
						icon: RiFileChartLine,
					},
					{
						title: "Uso de Cartões",
						url: "/relatorios/uso-cartoes",
						icon: RiBankCard2Line,
					},
				],
			},
		],
		navSecondary: [
			{
				title: "Ajustes",
				url: "/ajustes",
				icon: RiSettings2Line,
			},
		],
	};
}
