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.DpianiFerieController;
import it.micegroup.gestioneferie.pianificazioneferie.dto.DpianiFerieDto;
import it.micegroup.gestioneferie.pianificazioneferie.entity.DpianiFerie;

import it.micegroup.gestioneferie.pianificazioneferie.controller.DstatiPianoFerieController;

import it.micegroup.gestioneferie.pianificazioneferie.controller.DrichiesteApprovazPfController;
import it.micegroup.gestioneferie.pianificazioneferie.controller.DrichAdesionePfController;
import it.micegroup.gestioneferie.pianificazioneferie.controller.DammtiPianiFerieController;

@Component
public class DpianiFerieModelAssembler extends BaseModelAssembler<DpianiFerie, DpianiFerieDto, DpianiFerieController> {

	@Override
	public DpianiFerieDto toModel(DpianiFerie dpianiFerie) {
		DpianiFerieDto dpianiFerieDto = map(dpianiFerie, DpianiFerieDto.class, DpianiFerieController.class);

		// SELF LINK
		Link selfLink = convert(
				linkTo(methodOn(DpianiFerieController.class).getByObjectKey(dpianiFerie.getObjectKey())).withSelfRel());
		dpianiFerieDto.add(selfLink);

		// PARENT LINKS
		if (dpianiFerie.getTheDstatiPianoFerie() != null) {
			Link dstatiPianoFerieLink = convert(linkTo(methodOn(DstatiPianoFerieController.class)
					.getByObjectKey(dpianiFerie.getTheDstatiPianoFerieObjectKey())).withRel("theDstatiPianoFerie"));
			dpianiFerieDto.add(dstatiPianoFerieLink);
		}

		// CHILDREN LINKS
		if (dpianiFerie.getTheDrichiesteApprovazPf() != null) {
			Link drichiesteApprovazPfLink = convert(linkTo(
					methodOn(DrichiesteApprovazPfController.class).findByDpianiFerie(dpianiFerie.getObjectKey(), null))
							.withRel("theDrichiesteApprovazPf"));
			dpianiFerieDto.add(drichiesteApprovazPfLink);
		}
		if (dpianiFerie.getTheDrichAdesionePf() != null) {
			Link drichAdesionePfLink = convert(linkTo(
					methodOn(DrichAdesionePfController.class).findByDpianiFerie(dpianiFerie.getObjectKey(), null))
							.withRel("theDrichAdesionePf"));
			dpianiFerieDto.add(drichAdesionePfLink);
		}
		if (dpianiFerie.getTheDammtiPianiFerie() != null) {
			Link dammtiPianiFerieLink = convert(linkTo(
					methodOn(DammtiPianiFerieController.class).findByDpianiFerie(dpianiFerie.getObjectKey(), null))
							.withRel("theDammtiPianiFerie"));
			dpianiFerieDto.add(dammtiPianiFerieLink);
		}

		// PARENTS LINKS FOR IMPORTED MS

		// CHILDREN LINKS FOR IMPORTED MS

		return dpianiFerieDto;

	}

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

		return collectionEntities;
	}

}

