#!/usr/bin/perl
use DBI;
use strict;
use warnings;

my %L1=map {$_=>1} qw/
AudioVideo
Audio
Video
Development
Education
Game
Graphics
Network
Office
Science
Settings
System
Utility
/;
my %L2=map {$_=>1} qw/
Building
Debugger
IDE
GUIDesigner
Profiling
RevisionControl
Translation
Calendar
ContactManagement
Database
Dictionary
Chart
Email
Finance
FlowChart
PDA
ProjectManagement
Presentation
Spreadsheet
WordProcessor
2DGraphics
VectorGraphics
RasterGraphics
3DGraphics
Scanning
OCR
Photography
Publishing
Viewer
TextTools
DesktopSettings
HardwareSettings
Printing
PackageManager
Dialup
InstantMessaging
Chat
IRCClient
FileTransfer
HamRadio
News
P2P
RemoteAccess
Telephony
TelephonyTools
VideoConference
WebBrowser
WebDevelopment
Midi
Mixer
Sequencer
Tuner
TV
AudioVideoEditing
Player
Recorder
DiscBurning
ActionGame
AdventureGame
ArcadeGame
BoardGame
BlocksGame
CardGame
KidsGame
LogicGame
RolePlaying
Simulation
SportsGame
StrategyGame
Art
Construction
Music
Languages
Science
ArtificialIntelligence
Astronomy
Biology
Chemistry
ComputerScience
DataVisualization
Economy
Electricity
Geography
Geology
Geoscience
History
ImageProcessing
Literature
Math
NumericalAnalysis
MedicalSoftware
Physics
Robotics
Sports
ParallelComputing
Amusement
Archiving
Compression
Electronics
Emulator
Engineering
FileTools
FileManager
TerminalEmulator
Filesystem
Monitor
Security
Accessibility
Calculator
Clock
TextEditor
Documentation
Core

Teaching
X-Teaching
X-ALTLinux-Java
X-Typing
X-Desktop
/;

my $dbh = DBI->connect('dbi:SQLite:dbname='.$ENV{'REPOCOP_TEST_DBDIR'}.'/freedesktop-desktop.db',"","");

my $sth = $dbh->prepare("SELECT DESKTOPID, PKGID, DESKTOPDIR, DESKTOPFILE FROM freedesktop_desktop WHERE DESKTOPDIR='/usr/share/applications' AND DESKTOPTYPE='Application' AND IS_HIDDEN=0 AND IS_NODISPLAY=0 AND IS_ONLYSHOWIN=0");
$sth->execute();

my @row;
while (@row  = $sth->fetchrow_array) {
    my ($desktopid, $pkgid, $desktopdir, $filename)=@row;
    my $sth2 = $dbh->prepare('SELECT CATEGORY FROM freedesktop_desktop_categories WHERE DESKTOPID = ?');
    $sth2->execute($desktopid);
    my @categories;
    while (@row  = $sth2->fetchrow_array) {
	push @categories, @row;
    }
    my $STATUS='';
    my @message;
    unless (grep {$L1{$_}} @categories) {
	$STATUS="fail";
	push @message, "Main Categories consist of those categories that every conforming desktop environment MUST support.(http://standards.freedesktop.org/menu-spec/latest/apa.html). None found in $desktopdir/$filename. please, fix."
    }
    unless (grep {$L2{$_}} @categories) {
	$STATUS="warn" unless $STATUS eq "fail";
	push @message, "Menu-related Additional Categories (http://standards.freedesktop.org/menu-spec/latest/apa.html) not found in $desktopdir/$filename. Please add it or report a bug against this test if you already have registered one (not including menu unrelated ones as Core or Qt)."
    }
    system {"repocop-test-$STATUS"} "repocop-test-$STATUS", '-k', $pkgid, @message if $STATUS;
}
