# edited by glg
import sqlite3
class SettlementHistoryService:
    """
    Domain service histori settlement.
    Memisahkan concern query histori dari operasi settlement mutasi.
    """

    def __init__(self, model):
        self.model = model

    def get_last_settlements(self, limit=7):
        m = self.model
        conn = m.connect()
        conn.row_factory = sqlite3.Row
        cursor = conn.cursor()

        m._ensure_performance_indexes(cursor)
        m._ensure_settlement_history_columns(cursor)
        conn.commit()
        cursor.execute(
            """
            SELECT
                DATE(sh.tanggal) as tanggal,
                sh.admin,
                COALESCE(sh.kasir, '-') as kasir,
                sh.total_harus,
                sh.total_disetor,
                sh.total_non_tunai,
                sh.selisih,
                sh.status,
                sh.data_transaksi_id
            FROM settlement_history sh
            ORDER BY sh.tanggal DESC, sh.id DESC
            LIMIT ?
            """,
            (limit,),
        )
        rows = cursor.fetchall()
        conn.close()
        return [dict(r) for r in rows]

    def get_history_settlement_by_range(self, start_date, end_date, limit=None):
        m = self.model
        conn = m.connect()
        conn.row_factory = sqlite3.Row
        cursor = conn.cursor()
        m._ensure_performance_indexes(cursor)
        m._ensure_settlement_history_columns(cursor)
        conn.commit()
        resolved_limit = m._resolve_positive_limit(
            m._get_settlement_history_query_limit() if limit is None else limit,
            default=0,
        )
        date_range = m._build_datetime_range(start_date, end_date)
        if date_range:
            query = """
                SELECT
                    DATE(sh.tanggal) as tanggal,
                    sh.admin,
                    COALESCE(sh.kasir, '-') as kasir,
                    sh.total_harus,
                    sh.total_disetor,
                    sh.total_non_tunai,
                    sh.selisih,
                    sh.status,
                    sh.data_transaksi_id
                FROM settlement_history sh
                WHERE sh.tanggal >= ? AND sh.tanggal < ?
                ORDER BY sh.tanggal DESC, sh.id DESC
            """
            params = [date_range[0], date_range[1]]
            if resolved_limit > 0:
                query += " LIMIT ?"
                params.append(int(resolved_limit))
            cursor.execute(query, params)
        else:
            # edited by glg
            # Fallback kompatibilitas jika input tanggal tidak valid.
            query = """
                SELECT
                    DATE(tanggal) as tanggal,
                    admin,
                    COALESCE(kasir, '-') as kasir,
                    total_harus,
                    total_disetor,
                    total_non_tunai,
                    selisih,
                    status,
                    data_transaksi_id
                FROM settlement_history
                WHERE DATE(tanggal) BETWEEN DATE(?) AND DATE(?)
                ORDER BY DATE(tanggal) DESC, id DESC
            """
            params = [start_date, end_date]
            if resolved_limit > 0:
                query += " LIMIT ?"
                params.append(int(resolved_limit))
            cursor.execute(query, params)
        rows = cursor.fetchall()
        conn.close()
        return [dict(r) for r in rows]
