using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Shride.Models
{
    public interface IRideRepository
    {
        IQueryable<Account> Accounts { get; }
        IQueryable<Event> Events { get; }
        IQueryable<Person> Persons { get; }
        IQueryable<Review> Reviews { get; }
        IQueryable<Ride> Rides { get; }
        IQueryable<Transaction> Transactions { get; }
        IQueryable<Vehicle> Vehicles { get; }

        Account UserAccount { get; }

        // Lägg till person
        void AddPerson(Person person);

        // Lägg till konto
        void AddAccount(Account account);

        // Lägg till fordon
        void AddVehicle(Vehicle vehicle);

        // Lägg till evenemang
        void AddEvent(Event e);

        // Sök efter evenemang
        IQueryable<Event> SearchEvent();

        // Lägg till skjuts
        void AddRide(Ride ride, int vehicleId);

        // Sök efter skjuts
        IQueryable<Ride> SearchRide();

        // Hämta skjuts
        Ride GetRide(int id);

        // Boka skjuts
        void BookRide(Booking bookRide);

        // Avboka skjuts
        void CancelRide(Ride ride, Person person);

        // Utför transaktion
        void Pay(Transaction transaction);

        // Ge recension
        void Review(Review review);

        // Få koordinater och platsnamn för sökning
        LocationBundle GetCoordinatesAndLocation(string searchQuery);
    }
}
