package it.sw.pa.comune.artegna.service.mapper;

import it.sw.pa.comune.artegna.domain.Conferma;
import it.sw.pa.comune.artegna.domain.Prenotazione;
import it.sw.pa.comune.artegna.domain.Struttura;
import it.sw.pa.comune.artegna.domain.UtenteApp;
import it.sw.pa.comune.artegna.service.dto.ConfermaDTO;
import it.sw.pa.comune.artegna.service.dto.PrenotazioneDTO;
import it.sw.pa.comune.artegna.service.dto.StrutturaDTO;
import it.sw.pa.comune.artegna.service.dto.UtenteAppDTO;
import org.mapstruct.*;

/**
 * Mapper for the entity {@link Prenotazione} and its DTO {@link PrenotazioneDTO}.
 */
@Mapper(componentModel = "spring")
public interface PrenotazioneMapper extends EntityMapper<PrenotazioneDTO, Prenotazione> {
    @Mapping(target = "conferma", source = "conferma", qualifiedByName = "confermaId")
    @Mapping(target = "utente", source = "utente", qualifiedByName = "utenteAppUsername")
    @Mapping(target = "struttura", source = "struttura", qualifiedByName = "strutturaNome")
    PrenotazioneDTO toDto(Prenotazione s);

    @Named("confermaId")
    @BeanMapping(ignoreByDefault = true)
    @Mapping(target = "id", source = "id")
    ConfermaDTO toDtoConfermaId(Conferma conferma);

    @Named("utenteAppUsername")
    @BeanMapping(ignoreByDefault = true)
    @Mapping(target = "id", source = "id")
    @Mapping(target = "username", source = "username")
    UtenteAppDTO toDtoUtenteAppUsername(UtenteApp utenteApp);

    @Named("strutturaNome")
    @BeanMapping(ignoreByDefault = true)
    @Mapping(target = "id", source = "id")
    @Mapping(target = "nome", source = "nome")
    StrutturaDTO toDtoStrutturaNome(Struttura struttura);
}
