#!/usr/bin/env perl

# Copyright (C) 2011 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
# THE POSSIBILITY OF SUCH DAMAGE.

use strict;
use warnings;
use FindBin;
use File::Temp qw(tempfile);
use lib $FindBin::Bin;
use webkitdirs;

my $inputPath = "";
if ($ARGV[0]) {
    $inputPath = $ARGV[0]
} else {
    # Create a temporary file for STDIN.
    # FIXME: We can probably avoid putting this on the disk by directly piping
    # to prettify.rb via IPC::Open2.
    my $inputTempFileHandle;
    ($inputTempFileHandle, $inputPath) = tempfile(
        "inputtemp-XXXXXXXX",
        DIR => File::Spec->tmpdir(),
        SUFFIX => ".diff",
        UNLINK => 0,
    );

    while (<STDIN>) {
        print $inputTempFileHandle $_;
    }

    close($inputTempFileHandle);
}

# Create a temporary file for prettified patch.
my ($prettydiffFileHandle, $prettydiffPath) = tempfile(
    "prettydiff-XXXXXXXX",
    DIR => File::Spec->tmpdir(),
    SUFFIX => ".html",
    UNLINK => 0,
);
close($prettydiffFileHandle);

my $prettyPatchDir = sourceDir() . "/Websites/bugs.webkit.org/PrettyPatch/";
my $prettyPatchTool = sourceDir() . "/Websites/bugs.webkit.org/PrettyPatch/prettify.rb";

my $pathToPrettify = "ruby -I " . sourceDir() . "/Websites/bugs.webkit.org/PrettyPatch/ " . sourceDir() . "/Websites/bugs.webkit.org/PrettyPatch/prettify.rb";
system "$pathToPrettify " . quotemeta($inputPath) . " > $prettydiffPath";

if (isAppleCocoaWebKit()) {
    system "open", $prettydiffPath;
} elsif (isCygwin()) {
    system "cygstart",$prettydiffPath;
} elsif (isWindows()) {
    system "start", $prettydiffPath;
} elsif (isLinux() && `which xdg-open`) {
    system "xdg-open", $prettydiffPath;
} else {
    print "Created prettified diff at " . $prettydiffPath . ".";
}
