package it.micegroup.gestioneferie.pianificazioneferie.assembler;

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;

import it.micegroup.gestioneferie.libs.assembler.BaseModelAssembler;
import it.micegroup.gestioneferie.pianificazioneferie.controller.DpianificFerieAmmtoController;
import it.micegroup.gestioneferie.pianificazioneferie.dto.DpianificFerieAmmtoDto;
import it.micegroup.gestioneferie.pianificazioneferie.entity.DpianificFerieAmmto;

import it.micegroup.gestioneferie.pianificazioneferie.controller.DstatiPianificFerieController;
import it.micegroup.gestioneferie.pianificazioneferie.controller.DesitiRichAdesionePfController;

import it.micegroup.gestioneferie.pianificazioneferie.controller.DrichPianifFerieAmmtoController;
import it.micegroup.gestioneferie.pianificazioneferie.controller.DperiodiAmmtoPfController;

@Component
public class DpianificFerieAmmtoModelAssembler
		extends BaseModelAssembler<DpianificFerieAmmto, DpianificFerieAmmtoDto, DpianificFerieAmmtoController> {

	@Override
	public DpianificFerieAmmtoDto toModel(DpianificFerieAmmto dpianificFerieAmmto) {
		DpianificFerieAmmtoDto dpianificFerieAmmtoDto = map(dpianificFerieAmmto, DpianificFerieAmmtoDto.class,
				DpianificFerieAmmtoController.class);

		// SELF LINK
		Link selfLink = convert(
				linkTo(methodOn(DpianificFerieAmmtoController.class).getByObjectKey(dpianificFerieAmmto.getObjectKey()))
						.withSelfRel());
		dpianificFerieAmmtoDto.add(selfLink);

		// PARENT LINKS
		if (dpianificFerieAmmto.getTheDstatiPianificFerie() != null) {
			Link dstatiPianificFerieLink = convert(linkTo(methodOn(DstatiPianificFerieController.class)
					.getByObjectKey(dpianificFerieAmmto.getTheDstatiPianificFerieObjectKey()))
							.withRel("theDstatiPianificFerie"));
			dpianificFerieAmmtoDto.add(dstatiPianificFerieLink);
		}
		if (dpianificFerieAmmto.getTheDesitiRichAdesionePf() != null) {
			Link desitiRichAdesionePfLink = convert(linkTo(methodOn(DesitiRichAdesionePfController.class)
					.getByObjectKey(dpianificFerieAmmto.getTheDesitiRichAdesionePfObjectKey()))
							.withRel("theDesitiRichAdesionePf"));
			dpianificFerieAmmtoDto.add(desitiRichAdesionePfLink);
		}

		// CHILDREN LINKS
		if (dpianificFerieAmmto.getTheDrichPianifFerieAmmto() != null) {
			Link drichPianifFerieAmmtoLink = convert(linkTo(methodOn(DrichPianifFerieAmmtoController.class)
					.findByDpianificFerieAmmto(dpianificFerieAmmto.getObjectKey(), null))
							.withRel("theDrichPianifFerieAmmto"));
			dpianificFerieAmmtoDto.add(drichPianifFerieAmmtoLink);
		}
		if (dpianificFerieAmmto.getTheDperiodiAmmtoPf() != null) {
			Link dperiodiAmmtoPfLink = convert(linkTo(methodOn(DperiodiAmmtoPfController.class)
					.findByDpianificFerieAmmto(dpianificFerieAmmto.getObjectKey(), null))
							.withRel("theDperiodiAmmtoPf"));
			dpianificFerieAmmtoDto.add(dperiodiAmmtoPfLink);
		}

		// PARENTS LINKS FOR IMPORTED MS

		// CHILDREN LINKS FOR IMPORTED MS

		return dpianificFerieAmmtoDto;

	}

	@Override
	public CollectionModel<DpianificFerieAmmtoDto> toCollectionModel(Iterable<? extends DpianificFerieAmmto> entities) {
		CollectionModel<DpianificFerieAmmtoDto> collectionEntities = super.toCollectionModel(entities);
		// collectionEntities.add(linkTo(methodOn(OrdineController.class).findPaginated(null,
		// null)).withSelfRel());

		return collectionEntities;
	}

}

