import React from 'react';
import {
	Alternativ,
	ARBEIDSTIDER,
	garanterListe,
	getRelevanteTiltak,
	GyldighetsRegistrerer,
	ledetekst,
	navngiTiltak,
	OppsummeringBlokk,
	OppsummeringFiler,
	useOppsummering,
	utledTiltaksskissefeilmelding,
} from '..';
import { validerVarslingsplan } from '../validering/VarslingsplanValidering';
import { TilbakemeldingForSteg } from './tilbakemelding/TilbakemeldingForSteg';
import { OppsummeringPunkt } from '../pynt/OppsummeringPunkt';
import { SlettetInformasjonsboks } from './SlettetInformasjonsboks';
import { Tiltak } from '../domene/Soknad';

export function VarslingsplanOppsummering() {
	const {
		id: soknadId,
		kunLesbar,
		vegarbeid,
		lastNedVedleggUrl,
		lastNedVedlegg,
		gyldighet,
		soknad,
		forrigeSoknad,
	} = useOppsummering();

	const redigeringsLenke = !kunLesbar && `#/${soknadId}/varslingsplan`;
	const filer = vegarbeid.varslingsplan?.vedlegg || [];
	const plantype = vegarbeid?.plantype;
	const [relevanteTiltak] = getRelevanteTiltak(
		plantype,
		vegarbeid?.vegarbeidsbeskrivelse
	);
	//til bruk i sammenligning for saksbehandler
	const [forrigeRelevanteTiltak] =
		getRelevanteTiltak(
			forrigeSoknad?.vegarbeid?.plantype,
			forrigeSoknad?.vegarbeid?.vegarbeidsbeskrivelse
		) || [];
	const valideringsfeil =
		validerVarslingsplan(soknad) ||
		utledTiltaksskissefeilmelding(filer, vegarbeid);

	const forrigeVedlegg =
		forrigeSoknad?.vegarbeid?.varslingsplan?.vedlegg || [];

	return (
		<>
			<TilbakemeldingForSteg steg="varslingsplan" />
			<OppsummeringBlokk
				tittel={ledetekst.getTekst(
					'arbeidsvarsling.soknad.Soknadskomponent.kulepunkter.Varslingsplan'
				)}
				redigeringsLenke={redigeringsLenke}
				ikon={'ikon-vedlegg'}
				ingenBakgrunn
				valideringsfeil={valideringsfeil}
			>
				{!valideringsfeil && (
					<OppsummeringPunkt
						tittel={ledetekst.getTekst(
							'arbeidsvarsling.frontendkomponenter.Fil.valgtefiler'
						)}
						className="tiltak-oppsummering"
					>
						<OppsummeringFiler
							lastNedVedleggUrl={lastNedVedleggUrl}
							lastNedVedlegg={lastNedVedlegg}
							filer={filer}
							forrigeFiler={forrigeSoknad && forrigeVedlegg}
							forEach={({ fil }) => {
								return (
									<Skissetiltak
										plantype={plantype}
										relevanteTiltak={relevanteTiltak}
										forrigeRelevanteTiltak={
											forrigeSoknad &&
											forrigeRelevanteTiltak
										}
										skisse={fil}
									/>
								);
							}}
							skisseprefiks={ledetekst.getTekst(
								'arbeidsvarsling.soknad.Varslingsplan.skisseprefiks'
							)}
						/>
					</OppsummeringPunkt>
				)}
			</OppsummeringBlokk>
			<GyldighetsRegistrerer
				gyldighet={gyldighet.obligatorisk()}
				erGyldig={!valideringsfeil}
			/>
		</>
	);
}

function Skissetiltak({
	plantype,
	relevanteTiltak,
	forrigeRelevanteTiltak,
	skisse,
}) {
	return (
		<>
			<ul className="blokk liste-ustilet">
				{ARBEIDSTIDER.map((arbeidstid, i) => {
					return Object.keys(relevanteTiltak).map((kategori, j) => {
						const tiltak = relevanteTiltak[kategori];
						return garanterListe(tiltak.alternativer).map(
							(alternativ: Alternativ, k) => {
								if (
									!alternativ.vedlagteSkisserIder[
										arbeidstid
									]?.some((it) => it == skisse.id)
								) {
									return;
								}
								const markerEndretTiltak = !!(
									!!forrigeRelevanteTiltak &&
									!forrigeRelevanteTiltak[
										kategori
									]?.alternativer
										.find(
											(it) =>
												it.valgt &&
												it.felt == alternativ.felt
										)
										?.vedlagteSkisserIder[arbeidstid]?.some(
											(it) => it == skisse.id
										)
								);

								return garanterListe(
									alternativ.arbeidstider
								).map((enArbeidstid, l) => {
									if (enArbeidstid !== arbeidstid) {
										return;
									}
									return (
										<li
											key={`${i}-${j}-${k}-${l}`}
											className={
												markerEndretTiltak
													? 'saksbehandling-redigert-informasjon-liste'
													: ''
											}
										>
											{navngiTiltak(
												plantype,
												kategori,
												alternativ,
												arbeidstid
											)}
										</li>
									);
								});
							}
						);
					});
				})}
			</ul>
			<SlettetInformasjonsboks
				vis={harSlettetTiltakFraSkisse(
					relevanteTiltak,
					forrigeRelevanteTiltak,
					skisse.id
				)}
				tekst={'Tiltak har blitt slettet fra skisse.'}
			/>
		</>
	);
}

function harSlettetTiltakFraSkisse(
	relevanteTiltak: Tiltak[],
	forrigeRelevanteTiltak: Tiltak[],
	skisseId: string
) {
	const filterTiltakForSkisser = (tiltak: Tiltak[], skisseId: string) =>
		tiltak
			? Object.values(tiltak)
					.flatMap((value: any) => value.alternativer)
					.filter((it) =>
						Object.values(it.vedlagteSkisserIder)
							.flat()
							.includes(skisseId)
					)
			: [];

	const antallTiltakForSkisserForrigeSoknad = filterTiltakForSkisser(
		forrigeRelevanteTiltak,
		skisseId
	);
	const antallTiltakForSkisserDenneSoknad = filterTiltakForSkisser(
		relevanteTiltak,
		skisseId
	);

	return (
		forrigeRelevanteTiltak &&
		antallTiltakForSkisserForrigeSoknad > antallTiltakForSkisserDenneSoknad
	);
}
