from sqlalchemy.orm import Session
from app.crud import near_me as near_me_crud

class NearMeService:
    @staticmethod
    def get_near_outlets(db2: Session, db3: Session, latitude: float, longitude: float) -> list:
        # 1. Get data terkonfirmasi dari db2 (FTTH_NEAR_ME)
        ftth_results = near_me_crud.get_near_me_list(db2, latitude, longitude)

        # 2. Get data checkin sales dari db3 (checkins_ftth)
        checkin_results = near_me_crud.get_near_checkins(db3, latitude, longitude)

        # 3. Konversi FTTH_NEAR_ME ORM objects ke dict format nearMeList
        combined = []
        for f in ftth_results:
            combined.append({
                "KODE": f.KODE,
                "STATUS": f.STATUS,
                "LATITUDE": f.LATITUDE,
                "LONGITUDE": f.LONGITUDE,
                "JENIS": f.JENIS
            })

        # 4. Map checkins_ftth ke format yang sama (nearMeList)
        for c in checkin_results:
            combined.append({
                "KODE": c.no_activity,
                "STATUS": c.status_pemesanan,
                "LATITUDE": str(c.latitude_rumah),
                "LONGITUDE": str(c.longitude_rumah),
                "JENIS": "homepass"
            })

        # 5. Get data fat_baru dari db3 (fat_baru)
        fat_baru_results = near_me_crud.get_near_fat_baru(db3, latitude, longitude)
        
        # 6. Map fat_baru ke format nearMeList
        for fb in fat_baru_results:
            combined.append({
                "KODE": fb.fat_code,
                "STATUS": fb.status or "",
                "LATITUDE": str(fb.latitude_fat),
                "LONGITUDE": str(fb.longitude_fat),
                "JENIS": "fat_baru"
            })

        return combined

    @staticmethod
    def get_fat_detail(db2: Session, kode: str):
        return near_me_crud.get_near_me_detail_fat(db2, kode)

    @staticmethod
    def get_homepass_detail(db2: Session, kode: str):
        return near_me_crud.get_near_me_detail_homepass(db2, kode)

    @staticmethod
    def get_checkin_detail(db2: Session, db3: Session, no_activity: str) -> dict:
        # 1. Ambil data checkin dari db3 berdasarkan no_activity
        checkin = near_me_crud.get_checkin_by_no_activity(db3, no_activity)
        if not checkin:
            raise ValueError(f"Data checkin dengan no_activity {no_activity} tidak ditemukan.")

        # 2. Ambil nama_sales dari db2 (FTTH_DETAIL_HOMEPASS_NEAR_ME) berdasarkan kode_sales
        nama_sales = near_me_crud.get_nama_sales_from_homepass(db2, checkin.kode_sales)

        return {
            "no_activity": checkin.no_activity,
            "nama_pelanggan": checkin.nama_pelanggan,
            "nomor_pelanggan": checkin.nomor_pelanggan,
            "latitude": str(checkin.latitude_rumah),
            "longitude": str(checkin.longitude_rumah),
            "status_pemesanan": checkin.status_pemesanan,
            "kode_sales": checkin.kode_sales,
            "nama_sales": nama_sales
        }

    @staticmethod
    def get_fat_baru_detail(db3: Session, kode: str):
        fat = near_me_crud.get_fat_baru_detail_near_me(db3, kode)
        if not fat:
            raise ValueError(f"Data fat_baru dengan kode {kode} tidak ditemukan.")
        return fat
