package dao

import (
	"server/global"
)

type ProjectFile struct {
	global.GVA_MODEL
	ProjectCode string    `json:"projectCode" from:"projectCode" gorm:"comment:项目编号"`
	Name        string    `json:"name" from:"name" gorm:"comment:文件名称"`
	Key         string    `json:"key" from:"key" gorm:"comment:key"`
	Genre       int       `json:"genre" form:"genre" gorm:"comment:项目类型"`
	FileGenre   FileGenre `json:"fileGenre" form:"fileGenre" gorm:"foreignKey:genre;references:id;"`
	Path        string    `json:"path" from:"path" gorm:"comment:路径"`
}

func (ProjectFile) TableName() string {
	return "project_file"
}

// TODO:项目文件查询

// QueryFilesByCode 查询项目文件 按项目code
func QueryFilesByCode(code string) (files []ProjectFile, err error) {
	err = global.GVA_DB.Model(&ProjectFile{}).Where("project_code = ?", code).Preload("FileGenre").Find(&files).Error
	return files, err
}

// QueryFileList 查询项目文件列表
func QueryFileList(limit, offset, genre int, code, name string) (files []ProjectFile, total int64, err error) {
	// 创建db
	db := global.GVA_DB.Model(&ProjectFile{}).Where("project_code = ?", code)
	// 如果有条件搜索 下方会自动创建搜索语句
	if genre != 0 {
		db = db.Where("genre = ?", genre)
	}
	if name != "" {
		db = db.Where("name LIKE ?", "%"+name+"%")
	}
	err = db.Count(&total).Error
	if err != nil {
		return
	}
	err = db.Order("id desc").Limit(limit).Offset(offset).Find(&files).Error
	return files, total, err
}

// QueryFilesByNameOrGenre 查询项目文件 按名称或类型
func QueryFilesByNameOrGenre(genre int, code, name string) (files []ProjectFile, err error) {
	// 创建db
	db := global.GVA_DB.Model(&ProjectFile{}).Where("project_code = ?", code)
	// 如果有条件搜索 下方会自动创建搜索语句
	if genre != 0 {
		db = db.Where("genre = ?", genre)
	}
	if name != "" {
		db = db.Where("name LIKE ?", "%"+name+"%")
	}
	err = db.Order("id desc").Find(&files).Error
	return files, err
}

// TODO:项目文件新增

// CreateFile 新增文件
func (pf ProjectFile) CreateFile() error {
	var isFile ProjectFile
	global.GVA_DB.Model(&ProjectFile{}).Where("project_code = ? AND name = ? AND genre = ?", pf.ProjectCode, pf.Name, pf.Genre).First(&isFile)
	if isFile.ID != 0 {
		err := global.GVA_DB.Model(&ProjectFile{}).Where("id = ?", isFile.ID).Updates(&pf).Error
		if err != nil {
			return err
		}
	} else {
		err := global.GVA_DB.Model(&ProjectFile{}).Create(&pf).Error
		if err != nil {
			return err
		}
	}
	return nil
}

// TODO:项目文件修改
// TODO:项目文件删除

// DeleteFile 删除文件
func DeleteFile(id uint) error {
	return global.GVA_DB.Unscoped().Where("id = ?", id).Delete(&ProjectFile{}).Error
}
