import { request } from '@umijs/max';

// 获取分类
export async function getCategories() {
    return request('/api/tag/all_cat');
}

// 获取种子列表
export async function getTorrentList(params: {
    category?: string;
    sortField: string;
    sortDirection: string;
    pageNum: number;
    pageSize: number;
}) {
    return request('/api/torrent/torrentList', {
        method: 'POST',
        data: params,
    });
}

export async function getTorrentInfo(params: {
    id: string | number;
}) {
    return request(`/api/torrent/info/${params.id}`, {
        method: 'POST',
    });
}


export async function downloadTorrent(params: {
    id: string | number;
    passkey?: string;
}) {
    return request('/api/torrent/download', {
        method: 'GET',
        params: {
            id: params.id,
        },
        responseType: 'blob',
    });
}

export async function addComment(params: {
    torrentId: number;
    pid?: number;
    comment: string;
}) {
    return request('/api/torrent/addComment', {
        method: 'POST',
        data: params,
    });
}

export async function getComments(params: {
    torrentId: number;
    pageNum?: number;
    pageSize?: number;
}) {
    return request('/api/torrent/comments', {
        method: 'GET',
        params,
    });
}

export interface TorrentAddParam {
    name: string;
    title: string;
    subheading: string;
    cover?: string;
    description: string;
    category: number;
    status?: number;
    anonymous?: number;
    remark?: string;
}

// 审核种子参数
export interface TorrentAuditParam {
    id: number;
    status: number;
    remark?: string;
}

// 种子实体
export interface TorrentEntity {
    id?: number;
    infoHash?: Uint8Array;
    name?: string;
    filename?: string;
    title?: string;
    subheading?: string;
    cover?: string;
    description?: string;
    category?: number;
    status?: number;
    fileStatus?: number;
    reviewer?: number;
    createTime?: string;
    updateTime?: string;
    owner?: number;
    size?: number;
    type?: number;
    fileCount?: number;
    comments?: number;
    views?: number;
    hits?: number;
    visible?: number;
    anonymous?: number;
    leechers?: number;
    seeders?: number;
    completions?: number;
    remark?: string;
}

// 添加种子
export async function addTorrent(param: TorrentAddParam) {
    return request('/api/torrent/add', {
        method: 'POST',
        data: param,
    });
}

// 审核种子
export async function auditTorrent(param: TorrentAuditParam) {
    return request('/api/torrent/audit', {
        method: 'POST',
        data: param,
    });
}

// 点赞
export async function favoriteTorrent(id: number) {
    return request('/api/torrent/favorite', {
        method: 'POST',
        params: { id },
    });
}

// 上传种子.torrent
export async function uploadTorrentFile(file: File, id: number) {
    const formData = new FormData();
    formData.append('file', file);
    formData.append('id', id.toString());
    return request('/api/torrent/upload', {
        method: 'POST',
        data: formData,
    });
}

// 更新种子
export async function updateTorrent(entity: TorrentEntity) {
    return request('/api/torrent/update', {
        method: 'POST',
        data: entity,
    });
}

// 删除种子
export async function deleteTorrent(ids: number[]) {
    return request('/api/torrent/delete', {
        method: 'POST',
        data: ids,
    });
}

// 获取服务器Tracker
export async function getTracker() {
    return request('/api/torrent/tracker', {
        method: 'POST',
    });
}

export interface TorrentSearchRequest {
    infoHash?: string;
    category?: number;
    status?: number;
    fileStatus?: number;
    owner?: number;
    type?: number;
    nameKeyword?: string;
    titleKeyword?: string;
    descriptionKeyword?: string;
    minSize?: number;
    maxSize?: number;
    createTimeStart?: string; // ISO string
    createTimeEnd?: string;   // ISO string
    sortField?: string;
    sortDirection?: string;
    pageNum?: number;
    pageSize?: number;
}

export interface UserEntity {
    user_id: number;
    user_name: string;
    nick_name: string;
    user_type: string;
    email: string;
    phonenumber: string;
    gender: string;
    avatar: string;
    password: string;
    status: number;
    login_ip: string;
    login_date: string;
    create_by: string;
    create_time: string;
    update_by: string;
    update_time: string;
    remark: string;
    full_name: string;
    state: number;
    added: string;
    last_login: string;
    last_access: string;
    last_home: string;
    last_offer: string;
    forum_access: string;
    last_staffmsg: string;
    last_pm: string;
    last_comment: string;
    last_post: string;
    last_active: string;
    privacy: number;
    reg_ip: string;
    level: number;
    seedtime: number;
    leechtime: number;
    real_uploaded: number;
    real_downloaded: number;
    modcomment: string;
    warning_by: number;
    warning_times: number;
    warning: boolean;
    warning_until: string;
    download: number;
    upload: number;
    invited_by: number;
    bonus: number;
    exp: number;
    check_code: string;
    reg_type: number;
}

export interface TorrentSearchResult {
    torrent: TorrentEntity;
    ownerInfo: UserEntity;
}

export interface TorrentSearchResponse {
    records: TorrentSearchResult[];
    total: number;
    size: number;
    current: number;
    pages: number;
}

export async function searchTorrents(params: TorrentSearchRequest) {
    return request<TorrentSearchResponse>('/api/torrent/search', {
        method: 'POST',
        data: params,
    });
}