"""Seed the analysis_types table with supported analyses."""
from app import create_app
from app.extensions import db
from app.models.analysis import AnalysisType

ANALYSES = [
    {
        'slug': 'speed_distance',
        'name': 'Speed & Distance Summary',
        'description': 'Compute total distance traveled, mean/max speed, and step length statistics per animal.',
        'category': 'metric',
        'min_fixes': 2,
        'min_animals': 1,
        'min_duration_hours': 0,
        'requires_regular_sampling': False,
        'python_module': 'app.analyses.metrics',
        'python_function': 'run_speed_distance',
        'default_params': {},
    },
    {
        'slug': 'nsd',
        'name': 'Net Squared Displacement',
        'description': 'Track displacement from origin over time to identify migration, nomadism, or residency patterns.',
        'category': 'metric',
        'min_fixes': 10,
        'min_animals': 1,
        'min_duration_hours': 24,
        'requires_regular_sampling': False,
        'python_module': 'app.analyses.metrics',
        'python_function': 'run_nsd',
        'default_params': {},
    },
    {
        'slug': 'fpt',
        'name': 'First Passage Time',
        'description': 'Identify spatial scales of movement by computing time to cross circles of increasing radii.',
        'category': 'metric',
        'min_fixes': 20,
        'min_animals': 1,
        'min_duration_hours': 1,
        'requires_regular_sampling': False,
        'python_module': 'app.analyses.metrics',
        'python_function': 'run_fpt',
        'default_params': {'radii': [100, 500, 1000, 5000]},
    },
    {
        'slug': 'mcp',
        'name': 'Minimum Convex Polygon',
        'description': 'Classic home range estimator using the smallest convex polygon enclosing all (or a percentage of) fixes.',
        'category': 'home_range',
        'min_fixes': 5,
        'min_animals': 1,
        'min_duration_hours': 0,
        'requires_regular_sampling': False,
        'python_module': 'app.analyses.home_range',
        'python_function': 'run_mcp',
        'default_params': {'percent': 95},
    },
    {
        'slug': 'kde',
        'name': 'Kernel Density Estimation',
        'description': 'Estimate utilization distribution using Gaussian KDE with configurable contour levels.',
        'category': 'home_range',
        'min_fixes': 30,
        'min_animals': 1,
        'min_duration_hours': 1,
        'requires_regular_sampling': False,
        'python_module': 'app.analyses.home_range',
        'python_function': 'run_kde',
        'default_params': {'contour_levels': [50, 95], 'grid_size': 100},
    },
    {
        'slug': 'locoh',
        'name': 'Local Convex Hull (LoCoH)',
        'description': 'Non-parametric home range estimator using local convex hulls, better at identifying hard boundaries.',
        'category': 'home_range',
        'min_fixes': 20,
        'min_animals': 1,
        'min_duration_hours': 0,
        'requires_regular_sampling': False,
        'python_module': 'app.analyses.home_range',
        'python_function': 'run_locoh',
        'default_params': {},
    },
    {
        'slug': 'hmm',
        'name': 'Hidden Markov Model',
        'description': 'Classify movement into behavioral states (e.g., foraging vs. transit) using step lengths and turning angles.',
        'category': 'movement',
        'min_fixes': 100,
        'min_animals': 1,
        'min_duration_hours': 24,
        'requires_regular_sampling': True,
        'python_module': 'app.analyses.movement_models',
        'python_function': 'run_hmm',
        'default_params': {'n_states': 2},
    },
    {
        'slug': 'variogram',
        'name': 'Empirical Variogram',
        'description': 'Analyze spatial autocorrelation over time lags to assess range residency and home range crossing time.',
        'category': 'movement',
        'min_fixes': 50,
        'min_animals': 1,
        'min_duration_hours': 24,
        'requires_regular_sampling': True,
        'python_module': 'app.analyses.autocorrelation',
        'python_function': 'run_variogram',
        'default_params': {'n_lags': 30},
    },
    {
        'slug': 'overlap',
        'name': 'Space Use Overlap',
        'description': 'Compute overlap indices (Bhattacharyya affinity, volume of intersection) between animals\' utilization distributions.',
        'category': 'home_range',
        'min_fixes': 30,
        'min_animals': 2,
        'min_duration_hours': 1,
        'requires_regular_sampling': False,
        'python_module': 'app.analyses.space_use',
        'python_function': 'run_overlap',
        'default_params': {'grid_size': 100},
    },
    {
        'slug': 'bbmm',
        'name': 'Brownian Bridge Movement Model',
        'description': 'Home range estimator that accounts for temporal autocorrelation and movement path between fixes.',
        'category': 'home_range',
        'min_fixes': 30,
        'min_animals': 1,
        'min_duration_hours': 1,
        'requires_regular_sampling': True,
        'python_module': 'app.analyses.space_use',
        'python_function': 'run_bbmm',
        'default_params': {'sig2': 20, 'contour_levels': [50, 95], 'grid_size': 100},
    },
]


def seed():
    app = create_app()
    with app.app_context():
        for data in ANALYSES:
            existing = AnalysisType.query.filter_by(slug=data['slug']).first()
            if existing:
                for k, v in data.items():
                    setattr(existing, k, v)
            else:
                db.session.add(AnalysisType(**data))
        db.session.commit()
        print(f'Seeded {len(ANALYSES)} analysis types.')


if __name__ == '__main__':
    seed()
