package database;

import object.Seed;
import object.User;
import object.UserPT;
import object.Notice;
import object.BegInfo;
import object.Post;
import object.Profile;
public interface DataManagerInterface{
//DB1

    public int RegisterUser(User userinfo);// 返回状态：0 success，1 邮箱重复，2其他原因
    public int UpdateInformation(User userinfo);// 返回状态：0 success，1 不存在，2其他原因
    public User GetInformation(String userid);// 返回用户的全部基本信息

    public UserPT GetInformationPT(String userid);//返回用户的全部pt站信息
    public int UpdateInformationPT(UserPT userinfo);//返回状态：0 success，1 邮箱重复，2其他原因
    public int RegisterUserPT(UserPT userinfo);//返回状态：0 success，1 邮箱重复，2其他原因

    public Seed GetSeedInformation(String seedid);//返回种子的全部信息;
    public int RegisterSeed(Seed seedinfo);//添加一个新的种子，0成功，其他失败信息待定;
    public int UpdateSeed(Seed seedinfo);//接收新的种子然后更新其全部属性;

    public Seed[] SearchSeed(String userQ);//传入搜索的关键词或句子，返回搜索到的种子信息（按照公共字符数量排序）
    
    public int AddNotice(Notice notice);//返回状态：0 success，1 重复，2其他原因
    public boolean UpdateNotice(Notice notice);//返回状态：0 success，1 重复，2其他原因
    public boolean DeleteNotice(String noticeid);//删除公告，返回状态：0 success，1 重复，2其他原因

    public int GetUserAvailableInviteTimes(String userid);//获取用户的剩余邀请次数
    public int InviteUser(String inviterid,String inviteemail);//邀请用户，返回状态：0 success，1 重复，2其他原因

    public boolean AddCollect(String userid,String postid);//添加一个收藏，返回状态：0 success，1 不存在,2其他原因
    public boolean DeleteCollect(String userid,String postid);//删除一个收藏，返回状态：0 success，1 不存在,2其他原因
    


// ----------------------------------------------------------------------------------------------------

//DB2
    public boolean AddBegSeed(BegInfo info);//添加一个新的求种信息，返回状态：0 success，1 重复，2其他原因
    public boolean UpdateBegSeed(BegInfo info);//更新一个求种信息，返回状态：0 success，1 重复，2其他原因
    public boolean DeleteBegSeed(String begid);//删除一个求种信息，返回状态：0 success，1 重复，2其他原因
    public boolean VoteSeed(String begid,String userid,boolean vote);//投票，返回状态：0 success，1 重复，2其他原因,vote=true表示赞成，vote=false表示反对
    public int SubmitSeed(String begid,Seed seed);//提交种子，返回状态：0 success，1 重复，2其他原因
    public void SettleBeg();//结算所有求种信息，求种信息中需要增加Beg截止日期，默认14天，期间投票>的则Beg成功，否则Beg失败，并发放对应奖励

    public int AddPost(Post post);//添加一个新的帖子，返回状态：0 success，1 重复，2其他原因
    public int UpdatePost(Post post);//更新一个帖子，返回状态：0 success，1 不存在,2其他原因
    public int DeletePost(String postid);//删除一个帖子，返回状态：0 success，1 不存在,2其他原因

    public int AddComment(String postid,String comment);//添加一个评论，返回状态：0 success，1 不存在，2其他原因
    public int DeleteComment(String postid,String commentid);//删除一个评论，返回状态：0 success，1 不存在,2其他原因

    

    public boolean ExchangeMagicToUpload(String userid,int magic);//将魔力值兑换为上传量，返回状态：0 success，1 不存在,2其他原因
    public boolean ExchangeMagicToDownload(String userid,int magic);//将魔力值兑换为下载量，返回状态：0 success，1 不存在,2其他原因
    public boolean ExchangeMagicToVip(String userid,int magic);//将魔力值兑换为VIP次数，返回状态：0 success，1 不存在,2其他原因

    public boolean UploadTransmitProfile(Profile profile);
    public Profile GetTransmitProfile(String profileid);//获取迁移信息
    public boolean ExamTransmitProfile(String profileid,boolean result);//审核迁移信息,0成功，1失败
    public Profile[] GetTransmitProfileList();//获取所有迁移信息

}   