package models.services
import models._
import play.api.i18n._
import play.api.mvc.MultipartFormData.FilePart
import play.api.libs.Files.TemporaryFile
import java.io.File
import org.squeryl._
import org.squeryl.dsl._
import org.squeryl.PrimitiveTypeMode._
import java.io.FileInputStream

case class AtachManager(){
  def uploadAtach(atach:FilePart[TemporaryFile], grpName:String, partId:Long, notifyId:Long, replyId:Long) = {
      val filename = atach.filename
      val contentType = atach.contentType
      var folder = Messages("atach.folder")
      if(!folder.endsWith("/")) {folder = folder.concat("/")}
      val url = folder + filename
      atach.ref.moveTo(new File(url), true)
      val newAtach = Atach(contentType.get, filename, grpName, partId, notifyId, replyId)
      if(partId != 0) {
        associateAtach(PartManager(), partId, newAtach)
       }
      if(notifyId != 0) {
        associateAtach(NotifyManager(), notifyId, newAtach)
      }
      if(replyId != 0) {
        associateAtach(ReplyManager(), replyId, newAtach)
      }
  }
  
  def showAtach(id: Long):Array[Byte] = {
    val atach = getById(id)
    val file = new File(Messages("atach.folder") + "/" + atach.fileName)
    val data = new Array[Byte](file.length().asInstanceOf[Int])
    val io = new FileInputStream(file)
    io.read(data)
    io.close
    return data
  }
  
  def getById(id: Long):Atach = {
    PartsListDb.atachs.where(a => a.id === id).head
  }
  
  def delete(id: Long) = {
    PartsListDb.atachs.deleteWhere(a => a.id === id)
  }
  
  def associateAtach(manager: AbstractManager, id: Long, atach:Atach) = {
    manager.getById(id).atachs.associate(atach)
  }
}