"""
Admin Panel Configuration using SQLAdmin
"""
from sqladmin import Admin, ModelView
from app.models import (
    User, Driver, Vehicle, VehicleCategory, Ride, 
    FareBid, Payment, Transaction, Wallet, 
    WithdrawalRequest, SystemConfig, MapProviderConfig,
    PromoCode, Notification, Rating
)

class UserAdmin(ModelView, model=User):
    column_list = [User.id, User.email, User.first_name, User.role, User.is_active]
    column_searchable_list = [User.email, User.first_name, User.phone]
    column_sortable_list = [User.id, User.created_at]
    icon = "fa-solid fa-user"

class DriverAdmin(ModelView, model=Driver):
    column_list = [Driver.id, Driver.user, Driver.status, Driver.is_online, Driver.is_on_ride, Driver.average_rating]
    column_searchable_list = [Driver.license_number]
    icon = "fa-solid fa-car-side"

class VehicleCategoryAdmin(ModelView, model=VehicleCategory):
    column_list = [VehicleCategory.id, VehicleCategory.name, VehicleCategory.display_name, VehicleCategory.base_fare]
    icon = "fa-solid fa-list"

class RideAdmin(ModelView, model=Ride):
    column_list = [Ride.id, Ride.ride_code, Ride.status, Ride.passenger, Ride.driver, Ride.final_fare]
    column_sortable_list = [Ride.created_at]
    icon = "fa-solid fa-route"

class PaymentAdmin(ModelView, model=Payment):
    column_list = [Payment.id, Payment.ride_id, Payment.total, Payment.status, Payment.payment_method]
    icon = "fa-solid fa-money-bill"

class TransactionAdmin(ModelView, model=Transaction):
    column_list = [Transaction.id, Transaction.transaction_ref, Transaction.transaction_type, Transaction.amount, Transaction.status]
    icon = "fa-solid fa-exchange-alt"

class SystemConfigAdmin(ModelView, model=SystemConfig):
    column_list = [SystemConfig.key, SystemConfig.value, SystemConfig.category]
    icon = "fa-solid fa-cogs"

class MapProviderConfigAdmin(ModelView, model=MapProviderConfig):
    column_list = [MapProviderConfig.provider_name, MapProviderConfig.is_active, MapProviderConfig.priority]
    icon = "fa-solid fa-map"

def setup_admin(app, engine):
    admin = Admin(app, engine)
    admin.add_view(UserAdmin)
    admin.add_view(DriverAdmin)
    admin.add_view(VehicleCategoryAdmin)
    admin.add_view(RideAdmin)
    admin.add_view(PaymentAdmin)
    admin.add_view(TransactionAdmin)
    admin.add_view(SystemConfigAdmin)
    admin.add_view(MapProviderConfigAdmin)
    return admin
