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.DrichAdesionePfController;
import it.micegroup.gestioneferie.pianificazioneferie.dto.DrichAdesionePfDto;
import it.micegroup.gestioneferie.pianificazioneferie.entity.DrichAdesionePf;

import it.micegroup.gestioneferie.pianificazioneferie.controller.DstatiRichAdesionePfController;
import it.micegroup.gestioneferie.pianificazioneferie.controller.DpianiFerieController;

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

@Component
public class DrichAdesionePfModelAssembler
		extends BaseModelAssembler<DrichAdesionePf, DrichAdesionePfDto, DrichAdesionePfController> {

	@Override
	public DrichAdesionePfDto toModel(DrichAdesionePf drichAdesionePf) {
		DrichAdesionePfDto drichAdesionePfDto = map(drichAdesionePf, DrichAdesionePfDto.class,
				DrichAdesionePfController.class);

		// SELF LINK
		Link selfLink = convert(
				linkTo(methodOn(DrichAdesionePfController.class).getByObjectKey(drichAdesionePf.getObjectKey()))
						.withSelfRel());
		drichAdesionePfDto.add(selfLink);

		// PARENT LINKS
		if (drichAdesionePf.getTheDstatiRichAdesionePf() != null) {
			Link dstatiRichAdesionePfLink = convert(linkTo(methodOn(DstatiRichAdesionePfController.class)
					.getByObjectKey(drichAdesionePf.getTheDstatiRichAdesionePfObjectKey()))
							.withRel("theDstatiRichAdesionePf"));
			drichAdesionePfDto.add(dstatiRichAdesionePfLink);
		}
		if (drichAdesionePf.getTheDpianiFerie() != null) {
			Link dpianiFerieLink = convert(linkTo(
					methodOn(DpianiFerieController.class).getByObjectKey(drichAdesionePf.getTheDpianiFerieObjectKey()))
							.withRel("theDpianiFerie"));
			drichAdesionePfDto.add(dpianiFerieLink);
		}

		// CHILDREN LINKS
		if (drichAdesionePf.getTheDesitiRichAdesionePf() != null) {
			Link desitiRichAdesionePfLink = convert(linkTo(methodOn(DesitiRichAdesionePfController.class)
					.findByDrichAdesionePf(drichAdesionePf.getObjectKey(), null)).withRel("theDesitiRichAdesionePf"));
			drichAdesionePfDto.add(desitiRichAdesionePfLink);
		}
		if (drichAdesionePf.getTheDsollecitiPf() != null) {
			Link dsollecitiPfLink = convert(linkTo(
					methodOn(DsollecitiPfController.class).findByDrichAdesionePf(drichAdesionePf.getObjectKey(), null))
							.withRel("theDsollecitiPf"));
			drichAdesionePfDto.add(dsollecitiPfLink);
		}

		// PARENTS LINKS FOR IMPORTED MS

		// CHILDREN LINKS FOR IMPORTED MS

		return drichAdesionePfDto;

	}

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

		return collectionEntities;
	}

}

