package com.cn.service;

import java.sql.SQLException; // 导入SQLException类，用于处理数据库操作时可能遇到的异常
import java.util.List; // 导入List接口，用于返回列表类型的数据

import com.cn.domain.Train; // 导入Train类，该类代表车次的实体

/**
 * 定义车次服务接口，提供车次相关的业务操作。
 */
public interface TrainService {

    /**
     * 添加一个新的车次。
     * 该方法将车次对象的信息添加到数据库中。
     * 如果添加成功，返回1；如果添加失败，抛出SQLException异常。
     *
     * @param train 车次对象，包含车次的详细信息。
     * @return 返回1表示添加成功。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    int add(Train train);

    /**
     * 根据车次ID删除一个车次。
     * 该方法根据传入的车次ID从数据库中删除对应的车次信息。
     * 如果删除成功，返回1；如果删除失败，抛出SQLException异常。
     *
     * @param trainId 要删除的车次的ID。
     * @return 返回1表示删除成功。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    int delete(Integer trainId);

    /**
     * 更新一个车次的信息。
     * 该方法根据传入的车次对象更新数据库中的车次信息。
     * 如果更新成功，返回1；如果更新失败，抛出SQLException异常。
     *
     * @param train 包含更新信息的车次对象。
     * @return 返回1表示更新成功。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    int update(Train train);

    /**
     * 获取所有车次的信息。
     * 该方法从数据库中查询所有车次的信息，并返回一个包含所有车次信息的列表。
     * 如果查询失败，抛出SQLException异常。
     *
     * @return 返回一个包含所有车次信息的List，其中每个元素都是Train对象。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    List<Train> getAll();

    /**
     * 根据车次ID查询一个车次的详细信息。
     * 该方法根据传入的车次ID从数据库中查询对应的车次详细信息。
     * 如果查询失败，抛出SQLException异常。
     *
     * @param trainId 要查询的车次的ID。
     * @return 返回一个Train对象，包含车次的详细信息。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    Train getById(Integer trainId);

    /**
     * 根据车次号查询车次信息。
     * 该方法根据传入的车次号从数据库中查询对应的车次信息。
     * 如果查询失败，抛出SQLException异常。
     *
     * @param trainNumber 车次号。
     * @return 返回一个包含匹配车次号的所有车次信息的List，其中每个元素都是Train对象。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    List<Train> getByTrainNumber(String trainNumber);

    /**
     * 根据起始站、终点站、开车时间查询车次信息。
     * 该方法根据传入的起始站、终点站和开车时间从数据库中查询对应的车次信息。
     * 如果查询失败，抛出SQLException异常。
     *
     * @param startStation 起始站名称。
     * @param endStation 终点站名称。
     * @param startTime 开车时间，传入时不包含时分秒。
     * @return 返回一个包含匹配起始站、终点站和开车时间的所有车次信息的List，其中每个元素都是Train对象。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    List<Train> getByStartEndStation(String startStation, String endStation, String startTime);

    /**
     * 获取所有非重复的起始站。
     * 该方法从数据库中查询所有非重复的起始站，并返回一个包含所有非重复起始站的列表。
     * 如果查询失败，抛出SQLException异常。
     *
     * @return 返回一个包含所有非重复起始站的List，其中每个元素都是Train对象。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    List<Train> getAllStartStation();

    /**
     * 获取所有非重复的终点站。
     * 该方法从数据库中查询所有非重复的终点站，并返回一个包含所有非重复终点站的列表。
     * 如果查询失败，抛出SQLException异常。
     *
     * @return 返回一个包含所有非重复终点站的List，其中每个元素都是Train对象。
     * @throws SQLException 如果数据库操作失败，则抛出SQLException异常。
     */
    List<Train> getAllEndStation();
}