package controller

import (
	"<%= config.go_package %>/app"
	"<%= config.go_package %>/model"
)

<%- types.select(&:gen_converter?).each do |type| -%>
<%-   if type.payload -%>
func <%= type.name %>PayloadToModel(src *app.<%= type.payload_name %>) model.<%= type.name %> {
	if src == nil {
		return model.<%= type.name %>{}
	}
  return model.<%= type.name %>{
<%-
      comments = []

      type.fields_including_id.each do |f|
      pf = type.payload.fields.detect{|pf| f.name.underscore == pf.name }
      if pf.nil?
        comments << "#{f.name} no payload field"
      elsif f.custom?
-%>
    <%= f.name %>: <%= f.type %>PayloadToModel(src.<%= f.name %>),
<%-   elsif pf.nullable? -%>
    <%= f.name %>: <%= f.type.camelize %>PointerTo<%= f.type.camelize %>(src.<%= f.name %>),
<%-   else -%>
    <%= f.name %>: src.<%= f.name %>,
<%-   end -%>
<%- end -%>
<%- comments.each do |comment| -%>
    // <%= comment %>
<%- end -%>
<%- type.payload.field_diffs(type.fields.map{|f| f.name.underscore}).each do |pf| -%>
    // No model field for payload field "<%= pf.name %>"
<%- end -%>
  }
}

<%-   end -%>
<%-   if type.media_type -%>
func <%= type.name %>ModelToMediaType(src *model.<%= type.name %>) *app.<%= type.media_type_name_for_go %> {
	if src == nil {
		return nil
	}
  return &app.<%= type.media_type_name_for_go %>{
<%-
      comments = []

      type.fields_including_id.each do |f|
        mf = type.media_type.fields.detect{|mf| f.name == mf.name.camelize }
        if mf.nil?
          comments << "#{f.name} no media type field"
        elsif f.custom?
          if f.type_obj && f.type_obj.base -%>
    <%= mf.goa_name %>: <%= f.type_obj.base %>(src.<%= f.name %>),
<%-       else -%>
    <%= mf.goa_name %>: <%= f.type %>ModelToMediaType(&src.<%= f.name %>),
<%-       end
        else -%>
<%-       if mf.golang_type == f.type -%>
    <%= mf.goa_name %>: <%= mf.nullable? ? '&' : '' %>src.<%= f.name %>,
<%-       else -%>
    <%= mf.goa_name %>: <%= f.type.camelize %>To<%= mf.golang_type.camelize %><%= mf.nullable? ? 'Pointer' : '' %>(src.<%= f.name %>),
<%-       end -%>
<%-     end -%>
<%-   end -%>
<%-   comments.each do |comment| -%>
    // <%= comment %>
<%-   end -%>
<%-   type.media_type.field_diffs(type.fields.map{|f| f.name.underscore}).each do |mf| -%>
    // No field for media type field "<%= mf.name %>"
<%-   end -%>
  }
}

<%-   end -%>
<%- end -%>