import asyncio
import random
from datetime import timedelta
from app.database import async_session_maker
from sqlalchemy import select, func
from app.models.ride import Ride, RideStatus
from app.models.payment import Payment, TransactionStatus, PaymentMethod

async def seed_payments():
    async with async_session_maker() as db:
        # Get completed rides without payments
        result = await db.execute(
            select(Ride).where(Ride.status == RideStatus.COMPLETED)
        )
        rides = result.scalars().all()
        print(f"Found {len(rides)} completed rides.")

        count = 0
        for ride in rides:
            # Check if payment exists
            existing = await db.scalar(select(Payment).where(Payment.ride_id == ride.id))
            if existing:
                continue

            fare = ride.estimated_fare or 2500
            commission = int(fare * 0.20)
            driver_amt = fare - commission
            
            payment = Payment(
                ride_id=ride.id,
                passenger_id=ride.passenger_id,
                driver_id=ride.driver_id,
                subtotal=fare,
                total=fare,
                driver_amount=driver_amt,
                commission_amount=commission,
                payment_method=random.choice([PaymentMethod.CASH, PaymentMethod.CARD]),
                status=TransactionStatus.COMPLETED,
                paid_at=(ride.requested_at or ride.created_at) + timedelta(minutes=45)
            )
            db.add(payment)
            count += 1
        
        await db.commit()
        print(f" seeded {count} payments.")

if __name__ == "__main__":
    asyncio.run(seed_payments())
