package entitymapping

import (
	"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
	"bitbucket.org/nemt/nemt-portal-api/domain/entity"
)

// providerMapping has method to map provider entities to view models
type notificationMapping struct {
	mapper *Mapper
}

// ToUserEntitySlice maps a User entity slice to User view model slice
func (mapping *notificationMapping) ToNotificationEntitySlice(list []viewmodel.Notification) (retVal []entity.Notification) {
	retVal = make([]entity.Notification, 0)

	for _, item := range list {
		retVal = append(retVal, mapping.ToNotificationEntity(item))
	}

	return retVal
}

func (mapping *notificationMapping) ToNotificationEntity(model viewmodel.Notification) entity.Notification {
	return entity.Notification{
		UUID:    model.UUID,
		To:      model.To,
		From:    model.From,
		Type:    model.Type,
		Subject: model.Subject,
		Message: model.Message,
		Created: model.Created,
		Ride: entity.Ride{
			UUID: model.Ride.UUID,
		},
		User:        mapping.mapper.User.ToUserEntity(model.User),
		CreatedUser: mapping.mapper.User.ToUserEntity(model.CreatedUser),
		Read:        model.Read,
		MessageType: model.MessageType,
	}
}

// ToUserEntitySlice maps a User entity slice to User view model slice
func (mapping *notificationMapping) ToNotificationModelSlice(list []entity.Notification) (retVal []viewmodel.Notification) {
	retVal = make([]viewmodel.Notification, 0)

	for _, item := range list {
		retVal = append(retVal, mapping.ToNotificationModel(item))
	}

	return retVal
}

func (mapping *notificationMapping) ToNotificationModel(model entity.Notification) viewmodel.Notification {
	return viewmodel.Notification{
		UUID:        model.UUID,
		To:          model.To,
		From:        model.From,
		Type:        model.Type,
		Subject:     model.Subject,
		Message:     model.Message,
		Created:     model.Created,
		Ride:        mapping.mapper.Ride.ToRideModel(model.Ride),
		User:        mapping.mapper.User.ToUserModel(model.User),
		CreatedUser: mapping.mapper.User.ToUserModel(model.CreatedUser),
		Read:        model.Read,
		MessageType: model.MessageType,
	}
}
