"""Seed popular IDX stocks into the coins table.

Usage:
    python3 scripts/seed_stocks.py

Seeds ~10 popular IDX stocks as starting data. Full stock list
will be fetched from Yahoo Finance during sync.
"""
from __future__ import annotations

import sys
import os

# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from app import create_app
from app.extensions import db
from app.models.coin import Coin
from app.models.coin_source import CoinSourceMapping

# Popular IDX stocks to seed (namespaced IDs)
STOCKS = [
    {'id': 'IDX.BBCA', 'symbol': 'BBCA', 'name': 'Bank Central Asia', 'sector': 'Banking',
     'sub_sector': 'Bank - Private'},
    {'id': 'IDX.BBRI', 'symbol': 'BBRI', 'name': 'Bank Rakyat Indonesia', 'sector': 'Banking',
     'sub_sector': 'Bank - State'},
    {'id': 'IDX.BMRI', 'symbol': 'BMRI', 'name': 'Bank Mandiri', 'sector': 'Banking',
     'sub_sector': 'Bank - State'},
    {'id': 'IDX.TLKM', 'symbol': 'TLKM', 'name': 'Telkom Indonesia', 'sector': 'Telecommunication',
     'sub_sector': 'Telecommunication'},
    {'id': 'IDX.ASII', 'symbol': 'ASII', 'name': 'Astra International', 'sector': 'Automotive',
     'sub_sector': 'Automotive & Components'},
    {'id': 'IDX.GOTO', 'symbol': 'GOTO', 'name': 'GoTo Gojek Tokopedia', 'sector': 'Technology',
     'sub_sector': 'E-commerce / Ride-hailing'},
    {'id': 'IDX.UNVR', 'symbol': 'UNVR', 'name': 'Unilever Indonesia', 'sector': 'Consumer Goods',
     'sub_sector': 'Consumer Staples'},
    {'id': 'IDX.ADRO', 'symbol': 'ADRO', 'name': 'Adaro Energy Indonesia', 'sector': 'Mining',
     'sub_sector': 'Coal Mining'},
    {'id': 'IDX.ANTM', 'symbol': 'ANTM', 'name': 'Aneka Tambang', 'sector': 'Mining',
     'sub_sector': 'Metal & Mineral Mining'},
    {'id': 'IDX.BRIS', 'symbol': 'BRIS', 'name': 'Bank Syariah Indonesia', 'sector': 'Banking',
     'sub_sector': 'Bank - Sharia'},
]


def seed_stocks():
    app = create_app()
    with app.app_context():
        from app.helpers.market_db import switch_market_schema
        switch_market_schema('stock')

        created = 0
        skipped = 0
        mappings_created = 0

        for stock in STOCKS:
            # Check if already exists
            existing = Coin.query.get(stock['id'])
            if existing:
                print(f"  [skip] {stock['id']} — already exists")
                skipped += 1
                continue

            coin = Coin(
                id=stock['id'],
                symbol=stock['symbol'],
                name=stock['name'],
                is_active=True,
                asset_type='stock',
                sector=stock['sector'],
                sub_sector=stock.get('sub_sector'),
                lot_size=100,  # IDX standard lot = 100 shares
            )
            db.session.add(coin)
            created += 1
            print(f"  [add]  {stock['id']} — {stock['name']} ({stock['sector']})")

            # Create Yahoo Finance source mapping
            mapping_exists = CoinSourceMapping.query.filter_by(
                coin_id=stock['id'], source='yahoo'
            ).first()
            if not mapping_exists:
                mapping = CoinSourceMapping(
                    coin_id=stock['id'],
                    source='yahoo',
                    source_coin_id=f"{stock['symbol']}.JK",
                    source_url=f"https://finance.yahoo.com/quote/{stock['symbol']}.JK",
                )
                db.session.add(mapping)
                mappings_created += 1

        db.session.commit()
        print(f"\n✓ Stocks seeded: {created} created, {skipped} skipped, "
              f"{mappings_created} Yahoo mappings created")
        print(f"  Total stocks in DB: {Coin.query.filter_by(asset_type='stock').count()}")


if __name__ == '__main__':
    seed_stocks()
