package com.brisco.meatwholesaler;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import java.util.Date;
import java.util.concurrent.TimeUnit;

public class DemoManager {
    private static final String PREFS_NAME = "demo_prefs";
    private static final String KEY_INSTALL_DATE = "install_date";
    private static final String KEY_FIRST_LAUNCH = "first_launch";
    private static final long DEMO_PERIOD_DAYS = 7;
    
    private final Context context;
    private final SharedPreferences prefs;
    
    public DemoManager(Context context) {
        this.context = context;
        this.prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    }
    
    public void recordFirstLaunch() {
        if (!prefs.contains(KEY_FIRST_LAUNCH)) {
            long currentTime = System.currentTimeMillis();
            SharedPreferences.Editor editor = prefs.edit();
            editor.putLong(KEY_INSTALL_DATE, currentTime);
            editor.putBoolean(KEY_FIRST_LAUNCH, true);
            editor.apply();
            Log.d("DemoManager", "First launch recorded at: " + new Date(currentTime));
        }
    }
    
    public boolean isDemoExpired() {
        if (!prefs.contains(KEY_INSTALL_DATE)) {
            recordFirstLaunch();
            return false;
        }
        
        long installTime = prefs.getLong(KEY_INSTALL_DATE, 0);
        long currentTime = System.currentTimeMillis();
        long daysSinceInstall = TimeUnit.MILLISECONDS.toDays(currentTime - installTime);
        
        boolean expired = daysSinceInstall >= DEMO_PERIOD_DAYS;
        Log.d("DemoManager", "Days since install: " + daysSinceInstall + ", Expired: " + expired);
        
        return expired;
    }
    
    public long getRemainingDays() {
        if (!prefs.contains(KEY_INSTALL_DATE)) {
            return DEMO_PERIOD_DAYS;
        }
        
        long installTime = prefs.getLong(KEY_INSTALL_DATE, 0);
        long currentTime = System.currentTimeMillis();
        long daysSinceInstall = TimeUnit.MILLISECONDS.toDays(currentTime - installTime);
        long remainingDays = Math.max(0, DEMO_PERIOD_DAYS - daysSinceInstall);
        
        return remainingDays;
    }
    
    public long getRemainingHours() {
        if (!prefs.contains(KEY_INSTALL_DATE)) {
            return DEMO_PERIOD_DAYS * 24;
        }
        
        long installTime = prefs.getLong(KEY_INSTALL_DATE, 0);
        long currentTime = System.currentTimeMillis();
        long hoursSinceInstall = TimeUnit.MILLISECONDS.toHours(currentTime - installTime);
        long remainingHours = Math.max(0, (DEMO_PERIOD_DAYS * 24) - hoursSinceInstall);
        
        return remainingHours;
    }
    
    public String getRemainingTimeString() {
        long remainingDays = getRemainingDays();
        long remainingHours = getRemainingHours() % 24;
        
        if (remainingDays > 0) {
            return remainingDays + " day" + (remainingDays != 1 ? "s" : "") + 
                   (remainingHours > 0 ? " " + remainingHours + " hour" + (remainingHours != 1 ? "s" : "") : "");
        } else {
            return remainingHours + " hour" + (remainingHours != 1 ? "s" : "");
        }
    }
    
    public void resetDemo() {
        SharedPreferences.Editor editor = prefs.edit();
        editor.clear();
        editor.apply();
        Log.d("DemoManager", "Demo reset");
    }
}
