package database;

import object.BegInfo;
import object.Notice;
import object.Post;
import object.Profile;
import object.Seed;
import object.User;
import object.UserPT;
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 int AddBegSeed(BegInfo info);//添加一个新的求种信息，返回状态：0 success，1 重复，2其他原因
    public int UpdateBegSeed(BegInfo info);//更新一个求种信息，返回状态：0 success，1 重复，2其他原因
    public int DeleteBegSeed(String begid);//删除一个求种信息，返回状态：0 success，1 重复，2其他原因
    public int VoteSeed(String begId, String seedId, String userId);//求种结果投票，返回状态：0 success，1 重复，2其他原因
    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 userid, 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();//获取所有迁移信息

}   