#! /usr/bin/perl

# Taking out the GDaemon stuff, until we can figure out what's wrong...
# Get the previous cvs version if you want it back, or uncomment the 
# comments that start with ###; and take out the lines that follow them
# (should be obvious which ones)
# E. Tabacman, Mon Sep 14 15:17:40 CDT 1998

# DO NOT EDIT THE NEXT LINE MANUALLY
#   IT IS MAINTAINED BY make & perlfix
BEGIN { require "../../../../maint/Sitedefs.pm"; }
#

$| = 1;

use strict;
use Setting;
use ErrorLog;
use CGITracker;
use PageTemplate;
use Util;

use Orrery;
use ObsSettings;
use AmPm;
###use GDaemon;

#create a CGITracker (reads the data), and pagetemplate (gives right look)
my $q = new CGITracker;
my $tmplt = new PageTemplate("nonav");

# title of the page...
my $title="Orrery Snapshots";
# options imported from ObsSettings
my $nav = $ObsSettings::nav;
my $tablecolor1 = $ObsSettings::tablecolor1;
my $tablecolor2 = $ObsSettings::tablecolor2;

#all the celestial bodies
my @bodies = ('Inner System','Sun','Mercury','Venus','Earth','Moon','Mars','Jupiter','Saturn','Uranus','Neptune','Pluto');
my @tobodies = ('Inner System','Sun','Mercury','Venus','Earth','Moon','Mars','Jupiter','Saturn','Uranus','Neptune','Pluto');
my @frombodies = ('Afar','Sun','Mercury','Venus','Earth','Moon','Mars','Jupiter','Saturn','Uranus','Neptune','Pluto');
#months (=hours), days, years?, minutes
my @months =('01','02','03','04','05','06','07','08','09','10','11','12');
my @days=('01','02','03','04','05','06','07','08','09','10','11','12','13',
     '14','15','16','17','18','19','20','21','22','23','24','25','26','27',
     '28','29','30','31');
my @minutes=('00','01','02','03','04','05','06','07','08','09',
             '10','11','12','13','14','15','16','17','18','19',
             '20','21','22','23','24','25','26','27','28','29',
             '30','31','32','33','34','35','36','37','38','39',
             '40','41','42','43','44','45','46','47','48','49',
             '50','51','52','53','54','55','56','57','58','59');
#get a unique filename
my $filename=&Util::UniqueName();
$filename .="\.jpg";

#if nothin read, use defaults
my $first = !($q->param());
# POV data
my $from=$q->param('from')||"Afar";
my $to=$q->param('to')||"Inner System";
my $autofov = $q->param('auto');
if ($autofov eq "") {$autofov="1";}
my $fov;
#percent of the image to show when automatic
my $perimg="0.7";
my $mag=$q->param('mag')||"1";
if ($autofov) {
  $fov=60; $mag=0.75;
} else {
  $fov = 45/$mag;
}
# when 
my $month=$q->param('month')||substr($filename,4,2);
my $day=$q->param('day')||substr($filename,6,2);
my $year=$q->param('year')||substr($filename,0,4);
my $ampm=$q->param('ampm');
my $hour=$q->param('hour')||substr($filename,8,2);
my $ampm=$q->param('ampm');
my $minutes=$q->param('minutes')||substr($filename,10,2);
# convert to am-pm style, if it wasn't already...
my $mhour;
($hour, $ampm, $mhour) = AmPm::ampmize($hour, $ampm, $mhour);
my $when = $month."/".$day."/".$year." ".$mhour.":".$minutes;
my $imgwhen = $month."/".$day."/".$year." ".$hour.":".$minutes.$ampm;
# have to delete the data form, or it will try to display the old value 
$q->delete('hour'); 

# add more variables here (fov, textures, orbits, etc)
my $cam="{";
my $h = "300"; #size of the image

# execute (but not if no data was entered)
if (!$first) {
   ###my $gd = new GDaemon("gv-orrery");
   ###my $TO = $gd->to();
   ###my $FROM = $gd->from();
   my $orrgv = new Orrery;
   my $TO = $orrgv->to;
   my $FROM = $orrgv->from;
  
   my $filepath="$ObsSettings::obshome/handson/image/images";
print STDERR "filepath=$filepath\n";


#  setdisplay All texture;

   my $orrcmd = "set Orr(gv_version) 1.6.1p1;
   loadgv;
   set Orr(trackcam)  \"default\";
   eqgrid 0;
   set Orr(now) [str2date \"$when\"];
   puts \"(merge-ap World {*+face *-edge *+texturing})\"
   if {\"$to\" == \"Inner System\"} {
     set Orr(watchobj) \"\" ;
     set Orr(followobj) \"\";
     stars 0;
     swell 2000;
     puts {(merge camera default {camtoworld transform {
             1             0             0             0
             0             1             0             0
             0             0             1             0
             0             0             3             1
            } fov $fov})};
     setdisplay {Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto} orbit;
   } else {
     set Orr(watchobj)  \"$to\";
     set Orr(followobj) $from;
     stars \"stars-to-mag-7.5.oogl\" ;
     swell 1;
     if {$autofov} {
      if {\$Orr(watchobj)==\"Earth\" && \$Orr(followobj)==\"Moon\"} {
       set fv 2.5 ;
      } elseif {\$Orr(watchobj)==\"Moon\" && \$Orr(followobj)==\"Earth\"} {
       set fv 0.65;
      } else {
       set d [lindex [arrange $to $from] 7];
       set r [lindex \$phys($to) 0];
       set fv [expr 2*\$r*57.29578/(\$d*$perimg)];
      };
      puts \"(merge camera default {fov \$fv})\";
     } else {
      puts {(merge camera default {fov $fov})};
     };
   };
   if {(\$Orr(watchobj)==\"Earth\" && \$Orr(followobj)==\"Moon\")||(\$Orr(watchobj)==\"Moon\" && \$Orr(followobj)==\"Earth\")} {
     puts { (merge camera default {near 0.0001}) };
   } else {
     puts { (merge camera default {near 0.1 far 100}) };
   };

   tick;

   puts { (snapshot default \"| $Sitedefs::MAGICKBIN/convert -quality 95 ppm:- jpeg:$filepath/$filename\" ppmmesa $h $h) };
   puts {(write camera - default)};
   puts {(echo \"DONE\n\")};
   puts { (exit) };
";
### take out "puts {(exit)};" line from above if want to use GDaemon...

###  $orrcmd =~ s/\n//g;
### Also, DO NOT use the above line unless using GDaemon
### mbp Sat Sep 19 19:54:17 1998

  print $TO "$orrcmd flush stdout;\n";
#print STDERR "orrcmd>>>>>>>>>>>>>>\n$orrcmd\norrcmd<<<<<<<<<<\n";

  #throw away the first line "camera {". Kinda silly. Should improve.
  my $nada=<$FROM>;
  # read the camera 
  while (<$FROM>) {
    s/\n//g;
    if ($_ eq "DONE") { last; }
  # how does one replace several spaces by only one? Next line does nothing
  #  s/\s+/ /g;
    #read the fov sent from Orrey (via gv)
    if (/fov/) { ($nada,$fov) = split; }
    $cam .= $_;
  }

  # close Orrery and Geomview
  ###$gd->close();
  $orrgv->close;
}

#pick the right image to display
my $dispimg;
my $tostudio;
if ($first) {
  $dispimg=$q->img({-width=>'300',-height=>'300',-src=>"inn_sys.jpg"}).
           $q->br."Inner system viewed from Afar<BR>".
           "08/26/1998 11:40 am<BR>Zoom: 0.8 x, FoV: 56.25&deg;";
} else {
  my $zoom;
  my $mag = 45/$fov;
  $zoom = " $mag x, <BR> FoV: $fov&deg;";

   $tostudio= <<EOF
<FORM METHOD="POST" ACTION="$Sitedefs::ROOT/studio/studio.cgi"
 ENCTYPE="application/x-www-form-urlencoded">
<INPUT TYPE="hidden"
 NAME="ORR[WHEN[$when],FROM[$from],TO[$to],TYPE[image],CAMERA[$cam]]"
 VALUE="add">
<INPUT TYPE="image"
 NAME="Add this image to your Science U Studio"
 WIDTH="60"
 HEIGHT="20"
 SRC="$Sitedefs::ROOT/pix/addstudio.gif">
</FORM>
EOF
    ;

  $dispimg=$q->table({-cellpadding=>'0',-cellspacing=>'0'},
             $q->Tr(
               [
               $q->td({-colspan=>'2', -align=>'center'},
                 $q->img({-width=>$h,-height=>$h,-src=>"images/$filename"})
               ),
               $q->td({-valign=>"TOP"},
		      qq|<table width="100%" cellpadding="0" cellspacing="0"><tr>
<td><b>$to viewed from $from<br>$imgwhen<br>Zoom: $zoom</b></td>
<td valign=top align=right>$tostudio</td>
</tr></table>\n|)
               ]
             )
           );
#   $tostudio= $q->startform("POST","$Setting::MuseumRootURL/studio/studio.cgi").
#           $q->hidden(-name=>"ORR[WHEN[$when],FROM[$from],TO[$to],TYPE[image],CAMERA[$cam]]", -default=>('add')).
#           $q->submit(-value=>'Add to Studio').
#           $q->endform;

}
            
#controls panel
my %autolabels=('1','automatic, or','0',' '); 
my $controls =  $q->startform("POST","image.cgi").
                 $q->table({-border=>'0',-cellpadding=>'2',-cellspacing=>'0'},
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor2"},"<B>Look at:</B>"),
                   $q->td({-bgcolor=>"$tablecolor2"},$q->popup_menu(-name=>'to',-values=>\@tobodies,-default=>'Earth'))
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor2"},"<B>From:</B>"),
                   $q->td({-bgcolor=>"$tablecolor2"},$q->popup_menu(-name=>'from',-values=>\@frombodies,-default=>'Moon'))
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor1",-colspan=>'2'},"<B>When:</B>"),
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor1",-colspan=>'2'},
                    "&nbsp;&nbsp;Date ",
                    $q->popup_menu(-name=>'month',-values=>\@months,-default=>$month),"/",
                    $q->popup_menu(-name=>'day',-values=>\@days,-default=>$day),"/",
                    $q->textfield(-name=>'year',-default=>$year,-size=>'4',-maxlength=>'4')
                   )
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor1",-colspan=>'2',-align=>'CENTER',-valign=>'CENTER'},"(mm/dd/yyyy)")
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor1",-colspan=>'2'},
                    "&nbsp;&nbsp;Time ",
                    $q->popup_menu(-name=>'hour',-values=>\@months,-default=>$hour),":",
                    $q->popup_menu(-name=>'minutes',-values=>\@minutes,-default=>$minutes),
                    $q->popup_menu(-name=>'ampm',-values=>['am','pm'],-default=>$ampm)
                   )
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor1",-colspan=>'2',-align=>'CENTER',-valign=>'CENTER'},"(hh:mm UT)")
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor2",-colspan=>'2'},"<B>Zoom:</B>"),
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor2",-colspan=>'2'},
                    "&nbsp;&nbsp;",
                    $q->radio_group(-name=>'auto',-values=>['1','0'],-default=>'1',-labels=>\%autolabels),
                    $q->textfield(-name=>'mag',-default=>'1',-size=>4),
                    "<B>x</B>"
                   )
                  ),
                  $q->Tr(
                   $q->td({-bgcolor=>"$tablecolor2",-colspan=>'2',-align=>'CENTER'},
                    $q->submit(-name=>'Show me!')
                   ),
                  )
                 ).
                $q->endform();
                 
#start printing the page 
$q->Print($tmplt->Header($title));

$q->Print(
  $q->table({-border=>'0',-width=>'100%',-cellpadding=>'5',-cellspacing=>'0'},
    $q->Tr(
      $q->td({-valign=>'TOP',-bgcolor=>'#cfcfcf',-align=>'CENTER'},
        $q->font({-size=>'5'},
          $q->b($title)
        )
      )
    ),
    $q->Tr({-align=>'CENTER'},
      $q->td({-bgcolor=>'#ffffff'},
        $q->table({-border=>'1',-cellpadding=>'0',-cellspacing=>'0',-align=>'CENTER'},
         $q->Tr({-valign=>'TOP'}, 
          $q->td($dispimg),
          $q->td({-align=>'CENTER',-bgcolor=>"$tablecolor1"},
           $controls
          )
         )
        ),
        $q->hr({-noshade=>'UNDEF',-width=>'60%'}),
        'Select what you want to look at, from where and when; then click "Show me".',
        $q->br,
        "You will probably need to adjust the Zoom factor to get a good image.",
        $q->br,
        "For an explanation of the terms and options, see the ",
        $q->a({-href=>"$ObsSettings::obsURL/facts/glossary.html"},"glossary."),
      )
    )
  )
);


# finish page
$q->Print($tmplt->Footer());

# Finalize
$q->EndPrint();
